前段時間使用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 字符集配置供參考:
[cpp]view plain
copy
[client]
default-character-set=gbk
port=3306
[server]
default-character-set=gbk
port=3306
[mysql]
default-character-set=gbk
[mysqld]
port=3306
basedir=c:/program files/mysql/mysql/
datadir=c:/program files/mysql/mysql/data/
default-character-set=gbk
default-storage-engine=innodb
MySQL插入中文資料出現亂碼的問題
一 問題描述 很多同學可能遇到過這樣乙個問題 在mysql資料庫中插入帶有中文的資料時,會變成亂碼或者是問號,這是由於編碼不一致所引起的。二 解決方法 開啟mysql安裝路徑 一般是c program files mysql mysql server 找到my.ini 開啟my.ini檔案 在 cl...
Mysql插入資料亂碼
部署專案的時候,發現插入資料位亂碼,檢查編碼,專案編碼為utf8,mysql資料庫和表的編碼也是utf8。執行 show create database queendb 結果為 create database queendb 40100 default character set utf8 也是正常...
Mysql插入亂碼問題
原因 資料庫table和插入語句的字元編碼不匹配或者資料庫table的編碼不支援中文 解決方案 修改table中的字元編碼為 utf 8 或gbk,gb2312 在 中鏈結資料庫時,連線字串後面加上?characterencoding utf8,例如jdbc mysql localhost 3306...