掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,振興企業(yè)網(wǎng)站建設,振興品牌網(wǎng)站建設,網(wǎng)站定制,振興網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,振興網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
字符(Character)是計算機中字母、數(shù)字、符號的統(tǒng)稱,一個字符可以是一個中文漢字、一個英文字母、一個阿拉伯數(shù)字、一個標點符號等。
計算機是以二進制的形式來存儲數(shù)據(jù)的。平時我們在顯示器上看到的數(shù)字、英文、標點符號、漢字等字符都是二進制數(shù)轉(zhuǎn)換之后的結(jié)果。
字符集(Character set)定義了字符和二進制的對應關系,為字符分配了唯一的編號。常見的字符集有 ASCII、GBK、IOS-8859-1 等。
字符編碼(Character encoding)也可以稱為字集碼,規(guī)定了如何將字符的編號存儲到計算機中。
校對規(guī)則(Collation)也可以稱為排序規(guī)則,是指在同一個字符集內(nèi)字符之間的比較規(guī)則。字符集和校對規(guī)則是一對多的關系,每個字符集都有一個默認的校對規(guī)則。字符集和校對規(guī)則相輔相成,相互依賴關聯(lián)。
簡單來說,字符集用來定義 MySQL 存儲字符串的方式,校對規(guī)則用來定義 MySQL 比較字符串的方式。
有些數(shù)據(jù)庫并沒有清晰的區(qū)分開字符集和校對規(guī)則。例如,在 SQL Server 中創(chuàng)建數(shù)據(jù)庫時,選擇字符集就相當于選定了字符集和校對規(guī)則。
而在 MySQL 中,字符集和校對規(guī)則是區(qū)分開的,必須設置字符集和校對規(guī)則。一般情況下,沒有特殊需求,只設置其一即可。只設置字符集時,MySQL 會將校對規(guī)則設置為字符集中對應的默認校對規(guī)則。
可以通過
SHOW VARIABLES LIKE 'character%';命令查看當前 MySQL 使用的字符集,命令和運行結(jié)果如下:
mysql> SHOW VARIABLES LIKE 'character%'; +--------------------------+---------------------------------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------------------------------+ | character_set_client | gbk | | character_set_connection | gbk | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | gbk | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ | +--------------------------+---------------------------------------------------------+ 8 rows in set, 1 warning (0.01 sec)
上述運行結(jié)果說明如下表所示:
| 名稱 | 說明 |
|---|---|
| character_set_client | MySQL 客戶端使用的字符集 |
| character_set_connection | 連接數(shù)據(jù)庫時使用的字符集 |
| character_set_database | 創(chuàng)建數(shù)據(jù)庫使用的字符集 |
| character_set_filesystem | MySQL 服務器文件系統(tǒng)使用的字符集,默認值為 binary,不做任何轉(zhuǎn)換 |
| character_set_results | 數(shù)據(jù)庫給客戶端返回數(shù)據(jù)時使用的字符集 |
| character_set_server | MySQL 服務器使用的字符集,建議由系統(tǒng)自己管理,不要人為定義 |
| character_set_system | 數(shù)據(jù)庫系統(tǒng)使用的字符集,默認值為 utf8,不需要設置 |
| character_sets_dir | 字符集的安裝目錄 |
可以通過
SHOW VARIABLES LIKE 'collation\_%';命令查看當前 MySQL 使用的校對規(guī)則,命令和運行結(jié)果如下:
mysql> SHOW VARIABLES LIKE 'collation\_%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | gbk_chinese_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 3 rows in set, 1 warning (0.01 sec)
對上述運行結(jié)果說明如下:
校對規(guī)則命令約定如下:
MySQL 中字符集的轉(zhuǎn)換過程如下:
1)在命令提示符窗口(cmd 命令行)中執(zhí)行 MySQL 命令或 sql 語句時,這些命令或語句從“命令提示符窗口字符集”轉(zhuǎn)換為“character_set_client”定義的字符集。
2)使用命令提示符窗口成功連接 MySQL 服務器后,就建立了一條“數(shù)據(jù)通信鏈路”,MySQL 命令或 sql 語句沿著“數(shù)據(jù)鏈路”傳向 MySQL 服務器,由 character_set_client 定義的字符集轉(zhuǎn)換為 character_set_connection 定義的字符集。
3)MySQL 服務實例收到數(shù)據(jù)通信鏈路中的 MySQL 命令或 sql 語句后,將 MySQL 命令或 sql 語句從 character_set_connection 定義的字符集轉(zhuǎn)換為 character_set_server 定義的字符集。
4)若 MySQL 命令或 sql 語句針對于某個數(shù)據(jù)庫進行操作,此時將 MySQL 命令或 sql 語句從 character_set_server 定義的字符集轉(zhuǎn)換為 character_set_database 定義的字符集。
5)MySQL 命令或 sql 語句執(zhí)行結(jié)束后,將執(zhí)行結(jié)果設置為 character_set_results 定義的字符集。
6)執(zhí)行結(jié)果沿著打開的數(shù)據(jù)通信鏈路原路返回,將執(zhí)行結(jié)果從 character_set_results 定義的字符集轉(zhuǎn)換為 character_set_client 定義的字符集,最終轉(zhuǎn)換為命令提示符窗口字符集,顯示到命令提示符窗口中。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流