亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為何mysql命令行select結果集有中文會亂碼?

為何mysql命令行select結果集有中文會亂碼?

PHP
海綿寶寶撒 2019-03-09 14:36:25
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;這個操作修改的就是第三種情況:客戶端的字符集

查看完整回答
反對 回復 2019-03-18
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

用 utf8 的方式去讀以 latin 方式存儲的數據 當然會亂碼

查看完整回答
反對 回復 2019-03-18
?
動漫人物

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就會亂碼

查看完整回答
反對 回復 2019-03-18
  • 3 回答
  • 0 關注
  • 1746 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號