在講解字符集和校對規(guī)則之前,我們先來簡單了解一下字符、字符集和字符編碼。
字符(Character)是計算機(jī)中字母、數(shù)字、符號的統(tǒng)稱,一個字符可以是一個中文漢字、一個英文字母、一個阿拉伯?dāng)?shù)字、一個標(biāo)點(diǎn)符號等。
計算機(jī)是以二進(jìn)制的形式來存儲數(shù)據(jù)的。平時我們在顯示器上看到的數(shù)字、英文、標(biāo)點(diǎn)符號、漢字等字符都是二進(jìn)制數(shù)轉(zhuǎn)換之后的結(jié)果。
字符集(Character set)定義了字符和二進(jìn)制的對應(yīng)關(guān)系,為字符分配了唯一的編號。常見的字符集有 ASCII、GBK、IOS-8859-1 等。
字符編碼(Character encoding)也可以稱為字集碼,規(guī)定了如何將字符的編號存儲到計算機(jī)中。
大部分字符集都只對應(yīng)一種字符編碼,例如:ASCII、IOS-8859-1、GB2312、GBK,都是既表示了字符集又表示了對應(yīng)的字符編碼。所以一般情況下,可以將兩者視為同義詞。Unicode 字符集除外,Unicode 有三種編碼方案,即 UTF-8、UTF-16 和 UTF-32。最為常用的是 UTF-8 編碼。
校對規(guī)則(Collation)也可以稱為排序規(guī)則,是指在同一個字符集內(nèi)字符之間的比較規(guī)則。字符集和校對規(guī)則是一對多的關(guān)系,每個字符集都有一個默認(rèn)的校對規(guī)則。字符集和校對規(guī)則相輔相成,相互依賴關(guān)聯(lián)。
簡單來說,字符集用來定義 MySQL 存儲字符串的方式,校對規(guī)則用來定義 MySQL 比較字符串的方式。
有些數(shù)據(jù)庫并沒有清晰的區(qū)分開字符集和校對規(guī)則。例如,在 SQL Server 中創(chuàng)建數(shù)據(jù)庫時,選擇字符集就相當(dāng)于選定了字符集和校對規(guī)則。
而在 MySQL 中,字符集和校對規(guī)則是區(qū)分開的,必須設(shè)置字符集和校對規(guī)則。一般情況下,沒有特殊需求,只設(shè)置其一即可。只設(shè)置字符集時,MySQL 會將校對規(guī)則設(shè)置為字符集中對應(yīng)的默認(rèn)校對規(guī)則。
可以通過SHOW VARIABLES LIKE 'character%';
命令查看當(dāng)前 MySQL 使用的字符集,命令和運(yùn)行結(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)
上述運(yùn)行結(jié)果說明如下表所示:
名稱 | 說明 |
---|---|
character_set_client | MySQL 客戶端使用的字符集 |
character_set_connection | 連接數(shù)據(jù)庫時使用的字符集 |
character_set_database | 創(chuàng)建數(shù)據(jù)庫使用的字符集 |
character_set_filesystem | MySQL 服務(wù)器文件系統(tǒng)使用的字符集,默認(rèn)值為 binary,不做任何轉(zhuǎn)換 |
character_set_results | 數(shù)據(jù)庫給客戶端返回數(shù)據(jù)時使用的字符集 |
character_set_server | MySQL 服務(wù)器使用的字符集,建議由系統(tǒng)自己管理,不要人為定義 |
character_set_system | 數(shù)據(jù)庫系統(tǒng)使用的字符集,默認(rèn)值為 utf8,不需要設(shè)置 |
character_sets_dir | 字符集的安裝目錄 |
亂碼時,不需要關(guān)心 character_set_filesystem、character_set_system 和 character_sets_dir 這 3 個系統(tǒng)變量,它們不會影響亂碼?。
可以通過SHOW VARIABLES LIKE 'collation\_%';
命令查看當(dāng)前 MySQL 使用的校對規(guī)則,命令和運(yùn)行結(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)
對上述運(yùn)行結(jié)果說明如下:
- collation_connection:連接數(shù)據(jù)庫時使用的校對規(guī)則
- collation_database:創(chuàng)建數(shù)據(jù)庫時使用的校對規(guī)則
- collation_server:MySQL 服務(wù)器使用的校對規(guī)則
校對規(guī)則命令約定如下:
- 以校對規(guī)則所對應(yīng)的字符集名開頭
- 以國家名居中(或以 general 居中)
- 以 ci、cs 或 bin 結(jié)尾,ci 表示大小寫不敏感,cs 表示大小寫敏感,bin 表示按二進(jìn)制編碼值比較。
MySQL字符集的轉(zhuǎn)換過程
MySQL 中字符集的轉(zhuǎn)換過程如下:
1)在命令提示符窗口(cmd 命令行)中執(zhí)行 MySQL 命令或 sql 語句時,這些命令或語句從“命令提示符窗口字符集”轉(zhuǎn)換為“character_set_client”定義的字符集。
2)使用命令提示符窗口成功連接 MySQL 服務(wù)器后,就建立了一條“數(shù)據(jù)通信鏈路”,MySQL 命令或 sql 語句沿著“數(shù)據(jù)鏈路”傳向 MySQL 服務(wù)器,由 character_set_client 定義的字符集轉(zhuǎn)換為 character_set_connection 定義的字符集。
3)MySQL 服務(wù)實(shí)例收到數(shù)據(jù)通信鏈路中的 MySQL 命令或 sql 語句后,將 MySQL 命令或 sql 語句從 character_set_connection 定義的字符集轉(zhuǎn)換為 character_set_server 定義的字符集。
4)若 MySQL 命令或 sql 語句針對于某個數(shù)據(jù)庫進(jìn)行操作,此時將 MySQL 命令或 sql 語句從 character_set_server 定義的字符集轉(zhuǎn)換為 character_set_database 定義的字符集。
5)MySQL 命令或 sql 語句執(zhí)行結(jié)束后,將執(zhí)行結(jié)果設(shè)置為 character_set_results 定義的字符集。
6)執(zhí)行結(jié)果沿著打開的數(shù)據(jù)通信鏈路原路返回,將執(zhí)行結(jié)果從 character_set_results 定義的字符集轉(zhuǎn)換為 character_set_client 定義的字符集,最終轉(zhuǎn)換為命令提示符窗口字符集,顯示到命令提示符窗口中。
文章來源:http://www.zghlxwxcb.cn/news/detail-448045.html
?黑馬程序員 MySQL數(shù)據(jù)庫入門到精通,從mysql安裝到mysql高級、mysql優(yōu)化全囊括文章來源地址http://www.zghlxwxcb.cn/news/detail-448045.html
到了這里,關(guān)于MySQL數(shù)據(jù)庫——MySQL字符集和校對規(guī)則詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!