前段時間使用vc+mysql做東西,中途發現一插入漢字的話就出現亂碼,網上找了很多資料,像在連接字串的地方設定字元集,發現都沒有解決問題,後來研究了一下mysql字元集的結構,終於解決問題。
MySQL服務端不加任何參數啟動時,如下面所示(下面中同樣顯示了我的mysql版本):
我的字元集配置中character_set_database和character_set_server為utf8,這是由於我本身的Mysql設定檔my.ini中設定的為utf8的原因造成的:
此時,可以發現,寫入的資料是亂碼(我這個裡面顯示為空白,但資料存在1行);
然後,更改伺服器啟動時的字元集,或是修改設定檔my.ini中的字元集
此時,可以發現原來寫入的資料仍然不能正常顯示:
然後,插入漢字字元,顯示仍然為亂碼:
通過如上測試可以發現,如果只在用戶端設定character_set_results那麼不管伺服器端是什麼字元集時建立、插入漢字的表都顯示不正確。如果再設定character_set_client,仍然不能影響由於設定character_set_results所產生的影響。
設定character_set_results
設定character_set_client
然後,如果再設定character_set_connection,不會影響已經建立和插入的表,在建立立、插入漢字的表就能正確顯示
原有表不發生變化
建立插入表和漢字字元,顯示正常:
我們可以查看一下此時各個表的表結構及其他們的字元集:
總結一下,如果你的插入或是顯示字元出現亂碼,那麼多半是由於你的資料庫字元集出現了問題。如果要想正確顯示漢字,必須同時設定character_set_client和
character_set_connection參數和伺服器端指定字元集保持一致,才能正確插入、顯示。
如果只是要顯示以前帶字元集正確插入漢字的表,可以只在用戶端指定character_set_results
就夠了。
附可以正確顯示漢字字元的的mysql
字元集配置供參考:
[client]<br />default-character-set=gbk<br />port=3306<br />[server]<br />default-character-set=gbk<br />port=3306<br />[mysql]<br />default-character-set=gbk<br />[mysqld]<br />port=3306<br />basedir=C:/Program Files/MySQL/mysql/<br />datadir=C:/Program Files/MySQL/mysql/data/<br />default-character-set=gbk<br />default-storage-engine=INNODB