亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MYSQL的字符集是怎樣的

發布時間:2021-11-16 16:40:51 來源:億速云 閱讀:155 作者:柒染 欄目:MySQL數據庫

MYSQL的字符集是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

關于MYSQL的字符集,系統里面有很多個變量設置,很多初學者都不太搞得清楚,包括我自己也是.
所以在這里寫點東西,希望把這幾個東西的關系搞清楚.
MYSQL的字符集變量可以通過以下命令得到:


show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | gbk                        |
| character_set_connection | gbk                        |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    |                            |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

MYSQL的字符集變量其實可以分為兩類,
一類是關于創建OBJECTS時要用到的.

character_set_database
 character_set_server

一類是在服務器處理連接的時候要用到的.
 character_set_client                                            
 character_set_connection                                        
 character_set_results

我們主要關注的是處理連接的字符集.

關注字符集問題,那你肯定是遇到了亂碼的問題. 其實解決亂碼問題在網上一搜一大堆.

如果能做到, 應用/MYSQL.CLENT/MYSQL.CONNETION/表/MYSQL.RESULT 的字符集一致,存取數據肯定沒有問題.


我在這里把這三個連接字符集的關系理理.

經過多次的測試,我把MYSQL處理字符的過程主要歸納為:

例: WINDOWS客戶端CHARSET=GBK,輸入"中" , 通過WINDOWS.GBK轉碼為 $a = D6D0,
================================================================================
 # 服務器收到CLIENT送來的值"D6D0", 并認為"D6D0"是$MYSQL.character_set_client 指定字符集的數據.
 # 從 $MYSQL.character_set_client  轉化---&gt $MYSQL.character_set_connection (如果字符集一樣就不轉換)
    if 轉換成功 ; then
       $a = $MYSQL.character_set_client.code  
    else
       $a = 3f (在這個環節不會報錯!)
    fi  
 
 # 從 $MYSQL.character_set_connection  轉化---&gt $TABLES.character_set (如果字符集一樣也會檢查一次)
   if 轉換成功 ; then
       $a = $MYSQL.character_set_client.code  , 并存入表
    else
       $a = 3f , 并報錯: Incorrect string value
       $a = 20 ($MYSQL.character_set_connection = $TABLES.character_set 的情況)
    fi

 # 從數據庫取數據.
 #   從 $TABLES.character_set --&gt $MYSQL.character_set_result
    if 轉換成功 ; then  
       $a = $MYSQL.character_set_result.code  , 正常顯示
    else
       $a = 3f/亂碼 , 顯示: ?或者亂碼
   fi
========================================================================================

以下是我測試過程中記錄的各種情況及報錯信息,以便大家分析:

(在這里我特意用了SSHTERM的兩種字符集進行測試. 我們可以把它理解為應用.)

SSHTERMCHAR_clientCHAR_connectiontutf_dumptgbk_dumptlatin1_dumptutf_warningtgbk_warningtlatin1_warning
gbkutf8utf8203f3fIncorrect 'xD6xD0'
存入表UTF8轉UTF8,這個環節字符集一樣也轉換一次.但在源字符集中沒找到.返回"空"
Incorrect  'xD6xD0'
存入表,用UTF8轉GBK時報錯
Incorrect  'xD6xD0'
存入表,用UTF8轉LATIN1時報錯
 gbkgbke4b8add6d03f正常正常Incorrect  'xD6xD0'
存入表時用GBK轉LATIN1時報錯
D6D0latin1latin1c396c3903f3fd6d0正常:(存了UTF8的D6D0)
如果以LATIN1取還是"D6D0"
Incorrect  'xD6xD0'
LATIN1轉GBK報錯
正常
 gbkutf8e4b8add6d03f正常正常Incorrect xE4xB8xAD
存入表,用UTF8轉LATIN1時報錯
 utf8gbk3f3f3fCLIENT向CONN轉換時已經丟了數據成3F,這中間的轉換不會報錯
         
utf8gbkgbke6b693e4b83fData truncated
"E4B8AD"只取了_GBK "E4B8"
Incorrect 'xAD
"E4B8AD"被兩分了兩段,而AD沒能轉換成功.
Incorrect 'xE4xB8xAD'
      在CONN向表轉換的時候,上面兩個的處理結果為什么不一樣呢? 
 utf8utf8e4b8add6d03f正常正常Incorrect xE4xB8xAD
E4B8ADgbkutf8e6b693e4b83fCLENT轉CONN數據被截取,
但這樣的處理不會報錯.
CLENT轉CONN數據被截取,
但這樣的處理不會報錯.
Incorrect  'xE6xB6x93'
 utf8gbke4b8add6d03f正常正常Incorrect  'xD6xD0'
 latin1latin1c3a4c2b8c2ad3f3f3fe4b8ad理論上這是"E4B8AD"UTF8的CODE,但又有點不像xE4xB8xAD
LATIN1向GBK轉不成功
正常

上表中,只要DUMP結果為e4b8ad/d6d0,說明數據存儲都是正常的.而且可以正常讀取.

DUMP結果為c396c390的情況比較特殊.讀者稍加分析應該還是能明白的.(其實就是原存原取).


相關命令:
      
創建測試表:                                                                  
create table tutf (name char(10)) engine=myisam default character set=utf8 ;
create table tgbk (name char(10)) engine=myisam default character set=gbk ;
create table tlat (name char(10)) engine=myisam default character set=latin1 ;

設置相關字符集:
set character_set_client=gbk ;
set character_set_connection=utf8;
set character_set_results=latin1;  

插入并DUMP數據:
truncate table tutf;truncate table tgbk;truncate table tlat;
insert into tutf values ('中');   show warnings ;
insert into tgbk values ('中');   show warnings ;
insert into tlat values ('中');    show warnings ;
system  hexdump /home/mysql/data/test/tutf.MYD ;
system  hexdump /home/mysql/data/test/tgbk.MYD ;
system  hexdump /home/mysql/data/test/tlat.MYD ;

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桂林市| 台前县| 靖宇县| 罗源县| 赤峰市| 澄城县| 德格县| 宁都县| 古交市| 固始县| 乐东| 江西省| 达州市| 时尚| 株洲县| 忻城县| 保亭| 景宁| 新竹县| 宽甸| 比如县| 渭源县| 石柱| 武威市| 大荔县| 宣威市| 萨迦县| 临沧市| 安阳县| 洪洞县| 阿勒泰市| 巴塘县| 信宜市| 闻喜县| 东乡族自治县| 墨江| 弥渡县| 新余市| 琼海市| 南涧| 松江区|