本文更新于2019-06-16,使用MySQL 5.7,,操作系統(tǒng)為Deepin 15.4,。
常用字符集
字符集 |
定長 |
代碼寬度 |
說明 |
ASCII或ISO-646 |
是 |
1字節(jié)7位 |
英文字母、數(shù)字,、標(biāo)點(diǎn)符號和33個控制符 |
ISO-8859系列 |
是 |
1字節(jié)8位 |
各西歐字符集,,兼容ASCII |
GB2312 |
否 |
1或2字節(jié) |
兼容ASCII,不推薦使用 |
GBK |
否 |
1或2字節(jié) |
兼容GB2312 |
GB18030 |
否 |
1,、2或4字節(jié) |
兼容GBK |
Unicode或UCS-4或ISO-10646 |
是 |
4字節(jié) |
從最高字節(jié)起依次代表組(group),、面(plane)、行(row),、格(ceil),,包括BMP、輔助字面和專用字面 |
UCS-2 |
是 |
2字節(jié) |
UCS-4的0組0面,,即基本多語言文字面(BMP) |
Unicode有如下編碼方式:
編碼方式 |
定長 |
代碼寬度 |
說明 |
UTF-8 |
否 |
1至6字節(jié) |
兼容ASCII |
UTF-16 |
否 |
2或4字節(jié) |
BMP使用2字節(jié)表示,,以外使用4字節(jié)表示,按字節(jié)序不同分為UTF-16BE和UTF-16LE |
UTF-32 |
是 |
4字節(jié) |
Unicode原始編碼,,按字節(jié)序不同分為UTF-32BE和UTF-32LE |
UTF-8編碼如下:
字節(jié) |
代碼位數(shù) |
代碼空間 |
字節(jié)組合 |
1 |
0-7 |
0x0 - 0x7f |
0xxxxxxx |
2 |
8-11 |
0x80 - 0x7ff |
110xxxxx,10xxxxxx |
3 |
12-16 |
0x800 - 0xffff |
1110xxxx,10xxxxxx,10xxxxxx |
4 |
17-21 |
0x10000 - 0x1fffff |
11110xxx,10xxxxxx,10xxxxxx,10xxxxxx |
5 |
22-26 |
0x200000 - 0x3ffffff |
111110xx,10xxxxxx,10xxxxxx,10xxxxxx,10xxxxxx |
6 |
27-31 |
0x4000000 - 0x7fffffff |
1111110x,10xxxxxx,10xxxxxx,10xxxxxx,10xxxxxx,10xxxxxx |
每個漢字,,GBK使用2字節(jié),UTF-8使用3字節(jié),。
MySQL字符集
MySQL的UTF-8字符集最大長度為3字節(jié),,只能表示BMP中的字符(0-0xffff)。若要使用大于3字節(jié)的字符(如emoji),,則需使用utf8mb4字符集,。
MySQL包含字符集和校對規(guī)則兩個概念。校對規(guī)則用來定義比較字符串的方式,,一種字符集至少有一種校對規(guī)則,,但可以有多種校對規(guī)則。校對規(guī)則的命名以其相關(guān)的字符集名開始,,中間通常包含一個語言名,,并且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(比較是基于字符編碼的值而與語言無關(guān))結(jié)束,,如gbk_chinese_ci,。
MySQL的字符集和校對規(guī)則有4個級別的設(shè)置:
- 服務(wù)器級:可通過配置文件或啟動選項(xiàng)設(shè)置,默認(rèn)為latin1,。
- 數(shù)據(jù)庫級:可通過
CREATE DATABASE 或ALTER DATABASE 設(shè)置,,如數(shù)據(jù)庫中已存在記錄,,修改字符集不會將已有數(shù)據(jù)按照新的字符集進(jìn)行存放。
- 表級:可通過
CREATE TABLE 或ALTER TABLE 設(shè)置,,如表中已存在記錄,,修改字符集不會將已有數(shù)據(jù)按照新的字符集進(jìn)行存放。
- 字段級:可通過
CREATE TABLE 或ALTER TABLE 設(shè)置,,如表中已存在記錄,,修改字符集不會將已有數(shù)據(jù)按照新的字符集進(jìn)行存放。
客戶端和服務(wù)器交互時,,還存在客戶端,、連接、返回結(jié)果的字符集和校對規(guī)則,,通常這三者是相同的,,才可以確保數(shù)據(jù)能被正確讀取??梢酝ㄟ^SET NAMES charset 同時修改這三個值,。可以通過[_charset] 'str' [COLLATE collation] 強(qiáng)制字符串的字符集和校對規(guī)則,。
已有記錄的字符集調(diào)整,,需先將數(shù)據(jù)導(dǎo)出,經(jīng)過適當(dāng)調(diào)整后重新導(dǎo)入,。
|