Mysql學習歷程基本語法(5)--中文數據問題

中文數據問題本質是字符集問題


\xD5\xC5\xD4\xBD代表"張越在"當前編碼下對應的二進制編碼轉換成的十六進制:兩個漢字對應四個字節 GBK

錯誤原因:服務器沒有識別對應的四個字節,服務器認爲數據是UTF8,一個漢字對應三個字節;

所有數據服務器認爲(表現)的一些特性,都是通過服務器端的變量來保存;系統先讀取自己的變量看應該怎麼表現;

查看服務器到底識別哪些字符集   show  character set;

服務器識別這麼多字符集,總有一種是服務器默認的和客戶端打交道的字符集show variables like 'character_set%' ;     show variables like '%character%';     show variables like '%collation%';

顯示結果:variable_name       value

character_set_client          utf8      服務器默認客戶端來的數據字符集UTF8

character_set_connection utf8 連接層字符集

character_set_database utf8 當前所在數據庫字符集

character_set_filesystem binary

character_set_results utf8 服務器默認給外部數據的字符集

問題根源:客戶端數據只能是gbk  而服務器認爲是utf8;產生矛盾  

解決方案:改變服務器默認的接受字符集爲gbk     

set  character_set_client=gbk;

查看數據是亂碼,原因:數據來源是服務器,解析數據是客戶端,客戶端只會識別gbk,但是實時服務器給的數據是utf8(三個字節代表一個數字) 

解決方案:修改服務器給客戶端的數據字符集爲gbk

set   character_set_results=gbk;


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

設置服務器對客戶端的字符集的認識:可以使用快捷方式

set  names gbk;==>character_set_client     character_set_connectioncharacter_set_results

connection連接層:是字符集轉變中間者,統一了效率更高;


校對集問題

校對集:數據比較的方式

校對集三種格式   _bin:binary 二進制比較,區分大小寫

     _cs:case sensitive,大小寫敏感,區分大小寫

      _ci:case insensitive,大小不寫敏感,不區分大小寫

查看所有校對集show collation;

校對集應用:只有當數據產生比較時,校對集才生效

對比:使用utf8_bin和utf8_general_ci來驗證不同的校對集效果

1.創建不同校對集對應的表

2.插入數據(此時校對集不立即生效)

3.比較,根據某個字段進行排序:order by 字段名  [asc| desc] ;       asc升序,默認的  desc降序


例子:create table my_collate_bin(name char(1)) charset utf8 collate utf8_bin;

  create table my_collate_ci(name char(1)) charset utf8 collate utf8_general_ci;

    insert  into  my_collate_bin values ('a'),('A'),('b'),('B');

    insert  into   my_collate_ci  values ('a'),('A'),('b'),('B');

select  *  from   my_collate_bin   order by name;

select  *  from   my_collate_ci   order by name;


注意:校對集必須在數據沒有之前聲明好,如果有了數據,再進行校對集修改,修改無效;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章