程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL 5.x處理中文全解

MySQL 5.x處理中文全解

編輯:MySQL綜合教程


MySQL 5.x處理中文全解   我這邊用 Java 連接 MySQL 數據庫,通過 JDBC 寫入數據。在 Java 中直接生成的中文字符串,寫入數據庫變成半角問號“?”。以下是我解決此問題的記錄。   首先,我用 Putty 這個工具連接 MySQL 以檢查中文寫入情況。這裡有一個設置。此設置如果不對,則會導致亂碼。   Putty 設定字符編碼集的位置:Window - Translation - UTF-8   然後,MySQL 提供了關於字符集的很多變量。可以通過 MySQL 命令來查看。 輸入命令:mysql> SHOW  VARIABLES  LIKE  '%char%';  會看到如下內容:  www.2cto.com  
MySQL與字符集有關的應用變量,它們是:character_set_client, character_set_connection, character_set_database, character_set_filesystem, character_set_results, character_set_server, character_set_system, character_sets_dir
  相信大家這些變量不全是 utf8 吧?比如有的是 'utf-8' ,有的是 'latin1' 一類的?全部都改成 'utf8' 才能保持一致,不出現亂碼。 設置變量語句格式:mysql> SET  character_set_server='utf8';   將變量名一個個修改成值非 utf8 的那些,逐句執行就行。 另外除非全部系統 + 所有用戶都是純微軟環境,否則不要使用微軟推廣的 GBK 字符集,不通用。   接下來解釋一下,為什麼不能用 UTF-8 、utf-8 一類的名稱,必須用 utf8 。大家可以看到 character_sets_dir 這個特變量。到其指定的目錄中看一下,就會發現很多字符集文件。其中 Index.xml 是一個字符集名稱的索引文件,裡邊有這麼一段:
<charset name="utf8">   <family>Unicode</family>   <description>UTF-8 Unicode</description>   <alias>utf-8</alias>   <collation name="utf8_general_ci"     id="33">    <flag>primary</flag>    <flag>compiled</flag>   </collation>   <collation name="utf8_bin"            id="83">     <flag>binary</flag>     <flag>compiled</flag>   </collation> </charset>
  咱們就是得讓指定的字符集名稱和這裡設定的 charset name 保持一致。這裡寫為 utf8 ,所以咱們的變量都得設為 utf8 。   通過命令設置的變量,在重啟之後會恢復原設置。所以我們可以考慮通過 my.cnf 文件來直接配置 MySQL 的這些變量。 在改動配置文件之前,肯定要做文件整個的備份。這個文件不能亂改,我試驗的結果,應該在 [client] 裡邊添加 default-character-set=utf8 ,在 [mysqld] 裡邊添加 character_set_server=utf8 ,然後保證最下邊 [mysql] 裡邊存在一個 default-character-set=utf8 。進行這種設定之後重啟 mysqld ,就不用每次開啟 MySQL 重新設定這些變量了。   www.2cto.com   ---------- ---------- ---------- ----------   數據庫解決完了,接下來就是 Java 連接數據庫的問題了。 JDBC 連接時,需要提供連接的 URL 。對於 MySQL 來說,這個連接應該設定幾個參數:useUnicode=true&characterEncoding=UTF-8 。這個寫法要嚴格一致,絕不能有偏差,比如把 UTF-8 寫成 utf8 則會造成功能失常。如果沒有別的連接參數,就用 ? 引導這二個參數,否則用 & 引導。   當然了,Java 裡邊的數據本身不能內容就是亂碼。這個是另外的事情。只要保證 Java 運行時,監測變量的值本身不是亂碼,就可以保證讀寫數據庫不再是亂碼了。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved