3 回答

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
數(shù)據(jù)庫(kù)字符集有三個(gè)地方需要注意:
1、錄入數(shù)據(jù)時(shí)的字符集
2、表數(shù)據(jù)存儲(chǔ)字符集
3、客戶端查詢時(shí)本地字符集
只有你的字符集對(duì)應(yīng)上了才不會(huì)亂碼,你的問(wèn)題就是1使用了latin1字符集,2是utf8,這時(shí)候就是3,你要使用latin1才能看到不亂碼,因?yàn)槟闶褂昧薼atin1的編碼給到mysql,mysql按照utf8的編碼存入,對(duì)mysql來(lái)說(shuō)你發(fā)過(guò)來(lái)的就是亂碼,我存的也是亂碼,想要讀出來(lái)正常的數(shù)據(jù)就要按照你最初的字符集編碼去讀才行
補(bǔ)充一下:
set names utf8;這個(gè)操作修改的就是第三種情況:客戶端的字符集

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
用 utf8 的方式去讀以 latin 方式存儲(chǔ)的數(shù)據(jù) 當(dāng)然會(huì)亂碼

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊
** 問(wèn)題所在:
數(shù)據(jù)入庫(kù)的時(shí)候存的是latin1編碼,你查詢的時(shí)候用UTF8編碼,而latin1無(wú)法轉(zhuǎn)化為utf8故顯示亂碼。
** 分析原因:
set names utf8
等價(jià)于
SET character_set_client = utf8; //表示SQL離開客戶端時(shí)的編碼
SET character_set_results = utf8; //服務(wù)器返回的結(jié)果集編碼
SET character_set_connection = utf8; //服務(wù)器接收后轉(zhuǎn)換的字符編碼
這樣就規(guī)定了客戶端和服務(wù)器之間通信編碼的統(tǒng)一。
** 結(jié)論:
你在初始數(shù)據(jù)入庫(kù)的時(shí)候都是Latin1編碼的數(shù)據(jù),后面執(zhí)行set names utf8
后,查詢的數(shù)據(jù)從latin1轉(zhuǎn)為utf8就會(huì)亂碼
- 3 回答
- 0 關(guān)注
- 1723 瀏覽
添加回答
舉報(bào)