mysql字符集情況如下圖
我直接select,結果集有中文不會亂碼,若set names utf8再select,結果集有中文就會亂碼,不理解原因...
3 回答

梵蒂岡之花
TA貢獻1900條經驗 獲得超5個贊
數據庫字符集有三個地方需要注意:
1、錄入數據時的字符集
2、表數據存儲字符集
3、客戶端查詢時本地字符集
只有你的字符集對應上了才不會亂碼,你的問題就是1使用了latin1字符集,2是utf8,這時候就是3,你要使用latin1才能看到不亂碼,因為你使用了latin1的編碼給到mysql,mysql按照utf8的編碼存入,對mysql來說你發過來的就是亂碼,我存的也是亂碼,想要讀出來正常的數據就要按照你最初的字符集編碼去讀才行
補充一下:
set names utf8;這個操作修改的就是第三種情況:客戶端的字符集

動漫人物
TA貢獻1815條經驗 獲得超10個贊
** 問題所在:
數據入庫的時候存的是latin1編碼,你查詢的時候用UTF8編碼,而latin1無法轉化為utf8故顯示亂碼。
** 分析原因:
set names utf8
等價于
SET character_set_client = utf8; //表示SQL離開客戶端時的編碼
SET character_set_results = utf8; //服務器返回的結果集編碼
SET character_set_connection = utf8; //服務器接收后轉換的字符編碼
這樣就規定了客戶端和服務器之間通信編碼的統一。
** 結論:
你在初始數據入庫的時候都是Latin1編碼的數據,后面執行set names utf8
后,查詢的數據從latin1轉為utf8就會亂碼
- 3 回答
- 0 關注
- 1746 瀏覽
添加回答
舉報
0/150
提交
取消