Toad fro MySQL 6.0 的客戶端中文字元編碼問題
Toad fro MySQL 4.6 Freeware中連線設定視窗中能夠設定是否使用Unicode,所以能夠靈活地根據伺服器上字符集的設定調整本地字符集設定,從而免除中文亂碼的煩惱。
不過,最近Toad fro MySQL 5.0 Freeware版本(5.0.0.345)釋出後,聲稱其內建Unicode支援,但是在連線我的一個測試環境的時候,查詢獲得的中文都沒有問題,但是修改資料庫的操作中涉及的中文都導致了亂碼。一下是一種解決方法。
1)背景知識——MySQL的字符集設定,以下摘自網上。
mysql4.1及其之後的版本,對字符集的支援分為四個層次: 伺服器(server),資料庫(database),資料表(table)和連線(connection):
character_set_server:這是設定伺服器使用的字符集
character_set_client :這是設定客戶端傳送查詢使用的字符集
character_set_connection :這是設定伺服器需要將收到的查詢串轉換成的字符集
character_set_results :這是設定伺服器要將結果資料轉換到的字符集,轉換後才傳送給客戶端
整個過程:
- client(如php程式)傳送一個查詢;
- 伺服器收到查詢,將查詢串從character_set_client 轉換到character_set_connection,然後執行轉換後的查詢;
- 伺服器將結果資料轉換到character_set_results字符集後傳送回客戶端。
你可以用下邊兩條命令檢視一下系統的字符集和排序方式設定:
mysql> SHOW VARIABLES LIKE ‘character_set_%’;
mysql> SHOW VARIABLES LIKE ‘collation_%’;
+--------------------------+---------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:""share"charsets" |
+--------------------------+---------------------------------+
mysql 預設用的字符集是latin1,連線校對用的latin1-_swedish_ci。看到這兒你應試有點明白了,我們通過php傳送的查詢一般是utf8或者GBK,GB2312,而它預設的是latin1,所以用phpmyadmin檢視或者直接進資料庫裡檢視資料,都是一些亂碼。(存取出來放在網頁上大多是正常的。)phpmyadmin在對mysql4.0以下會使用內建的庫來實現字符集的轉換,從而支援多語言版本,而對於4.1以上則完全交給Mysql。所以以上幾個層次的轉換如果有字符集不匹配的情況,出現亂碼就很容易理解了。說了半天,其實你只要把上述變數設定一致了,不管是直接在資料庫裡檢視,還是在phpmyadmin裡檢視都不會出現中文亂碼了。
假如你的系統和php網頁是utf8編碼,你可以將mysql的編碼由預設的latin1改為utf8.
編輯mysql的配置檔案,/etc/,在[mysqld]中設定default-character-set=utf8即可。不過原來的資料,假如你用4.0,mysqldump出來的資料是latin1的編碼,你再匯入就會出現亂碼。如果你原來的資料非常寶貴,那你還是用latin1編碼吧。
2)有了以上的背景知識,發現問題原因出在中文環境下Toad fro MySQL 5.0 Freeware連線伺服器後,variables中顯示的本地字符集為latin1,而Toad fro MySQL 4.6 Freeware勾選Unicode支援時variables中顯示的是utf8。然後再看MySQL伺服器上,儘管database的字符集設定的是utf8,但是character_set_system變數顯示的是latin1,所以問題的原因應該是:Toad fro MySQL 5.0 Freeware連線MySQL時,會根據伺服器上character_set_system或者character-set-server的設定設定本地的字符集。所以,在mysql啟動的命令列中新增--default_character_set=utf8(5.1中已經不建議使用,已--character-set-server替代),重新用Toad fro MySQL 5.0 Freeware連線,問題解決。(對於linux環境下,可以在/etc/my.cnf檔案中新增character-set-server=utf8)。
追加:對於mysql自帶的命令列工具mysl.exe,它會讀取my.ini檔案中的[mysql]段下的defautl-character-set設定,所以對於中文客戶端可以設定為gbk。此外,可以使用set charset gbk設定當前連線客戶端使用的字符集,Toad fro MySQL 5.0 Freeware預設情況下會使用相同的連線,在設計中文字元問題的操作前使用此語句(只需要執行一次),也能湊效。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23071790/viewspace-719848/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL客戶端中文亂碼問題。MySql客戶端
- MySQL 中字元編碼問題MySql字元
- Ubuntu中 MySQL 的中文編碼問題UbuntuMySql
- mysql客戶端在命令列下無法輸入中文字元MySql客戶端命令列字元
- 包含中文字元的URL編碼問題(轉)字元
- Oracle客戶端toad漢字亂碼解決方法Oracle客戶端
- 字元編碼問題字元
- JAVA FTP客戶端問題JavaFTP客戶端
- xfire 客戶端呼叫webservice的問題客戶端Web
- TSM客戶端的排程問題客戶端
- 中文版vnc客戶端,中文版vnc客戶端下載,中文版vnc客戶端如何使用?VNC客戶端
- Laravel對不同版本的MySQL字元編碼報錯問題LaravelMySql字元
- 客戶端tnsping不通問題客戶端
- JAVA的中文編碼問題Java
- Mysql設定字元編碼及varchar寬度問題MySql字元
- 字元編碼問題記錄字元
- mysql中文字元的問題全面處理MySql字元
- Docker部署mysql並提供客戶端訪問DockerMySql客戶端
- Redis 6.0 客戶端快取的伺服器端實現Redis客戶端快取伺服器
- Delphi連線mysql中文字元問題MySql字元
- oracle客戶端同sap衝突的問題Oracle客戶端
- Python的中文編碼問題Python
- 【字元編碼】Java字元編碼詳細解答及問題探討字元Java
- Ubuntu 字元介面中文亂碼問題Ubuntu字元
- MySQL 客戶端安裝MySql客戶端
- 微信公眾號傳送模板訊息,出現亂碼問題---字元中文編碼問題字元
- android客戶端向伺服器傳送請求中文亂碼的問Android客戶端伺服器
- Swoole 協程 MySQL 客戶端與非同步回撥 MySQL 客戶端的對比MySql客戶端非同步
- Mac下SVN客戶端CornerStone使用問題Mac客戶端
- python 中文編碼問題Python
- jdom解析中文編碼問題
- WebSphere客戶端遷移的一般問題Web客戶端
- 用VB編寫OPC客戶端訪問WINCC (轉)客戶端
- Swift編寫自己的API客戶端SwiftAPI客戶端
- 字元編碼常識及問題解析字元
- xml+xsl應用,包含中文字元的URL編碼問題 (轉)XML字元
- lxml處理xml時的字元編碼問題XML字元
- 跨平臺SSH客戶端Termius中文客戶端