亂碼問題——解決啊!

一、中文數(shù)據的本質是字符集問題

計算機只識別二進制,所以需要有一個二進制與字符的對應關系(字符集)

1.查看所有字符集

show character set;

39種字符集

2.查看服務器默認對外處理的字符集

show variables like 'character_set%';

字符集

3.客戶端數(shù)據只能是GBK,而服務器認為是utf8,所以需要改變服務器默認接收字符集為GBK

set character_set_client = gbk;

改變服務器默認接收字符集為GBK

4.客戶端向服務器插入中文數(shù)據:

插入中文數(shù)據

查看數(shù)據效果時:數(shù)據來源是服務器,解析數(shù)據是客戶端(客戶端只識別gbk:只會兩個字節(jié)一個漢字)但服務器給數(shù)據確實utf8(三個字節(jié)一個漢字)所以出現(xiàn)亂碼

查看數(shù)據時的亂碼

5.修改服務器給客戶端的數(shù)據字符集為gbk

set character_set_results = gbk;

修改服務器給客戶端的數(shù)據字符集為gbk

6.查看數(shù)據效果

不亂碼咯

set 變量 = 值;修改只是會話級別(當前客戶端,當次鏈接有效;關閉失效)

快捷設置字符集

set names 字符集

快捷設置字符集

二、web亂碼問題

動態(tài)網站由三部分構成:瀏覽器,apache服務器(PHP),數(shù)據庫服務器;三部分都有其自己的字符集(中文),數(shù)據需要在三部分之間傳遞,容易出現(xiàn)亂碼。所以需要 統(tǒng)一編碼(三碼合一)

亂碼問題解決:

解決方法

三、校對集問題

校對集:數(shù)據比較方式

校對集有三種格式:

_bin:binary,二進制比較,取出二進制位,一位一位的比較,區(qū)分大小寫
_cs:case sensitive,大小寫敏感,區(qū)分大小寫
_ci:case insensitice,大小寫不敏感,不區(qū)分大小寫

查看數(shù)據庫所支持的校對集

show collation;

校對集

校對集應用:當數(shù)據產生比較的時候,校對集才會生效。

1.使用utf8的_bin和_ci來驗證不同校對集的效果
①創(chuàng)建不同校對集對應的表

不同校對集對應

②插入數(shù)據

插入數(shù)據

③比較:根據某個字段進行排序

order by <字段名> [asc/desc]; asc升序,desc降序,默認是升序

比較
校對集:必須在沒有數(shù)據之前聲明好,如果有了數(shù)據,那么再進行校對修改,修改無效。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容