本文更新于2019-06-16,使用MySQL 5.7,作業系統為Deepin 15.4,
目錄- 常用字符集
- MySQL字符集
常用字符集
| 字符集 | 定長 | 代碼寬度 | 說明 |
|---|---|---|---|
| ASCII或ISO-646 | 是 | 1位元組7位 | 英文字母、數字、標點符號和33個控制符 |
| ISO-8859系列 | 是 | 1位元組8位 | 各西歐字符集,兼容ASCII |
| GB2312 | 否 | 1或2位元組 | 兼容ASCII,不推薦使用 |
| GBK | 否 | 1或2位元組 | 兼容GB2312 |
| GB18030 | 否 | 1、2或4位元組 | 兼容GBK |
| Unicode或UCS-4或ISO-10646 | 是 | 4位元組 | 從最高位元組起依次代表組(group)、面(plane)、行(row)、格(ceil),包括BMP、輔助字面和專用字面 |
| UCS-2 | 是 | 2位元組 | UCS-4的0組0面,即基本多語言文字面(BMP) |
Unicode有如下編碼方式:
| 編碼方式 | 定長 | 代碼寬度 | 說明 |
|---|---|---|---|
| UTF-8 | 否 | 1至6位元組 | 兼容ASCII |
| UTF-16 | 否 | 2或4位元組 | BMP使用2位元組表示,以外使用4位元組表示,按位元組序不同分為UTF-16BE和UTF-16LE |
| UTF-32 | 是 | 4位元組 | Unicode原始編碼,按位元組序不同分為UTF-32BE和UTF-32LE |
UTF-8編碼如下:
| 位元組 | 代碼位數 | 代碼空間 | 位元組組合 |
|---|---|---|---|
| 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位元組,UTF-8使用3位元組,
MySQL字符集
MySQL的UTF-8字符集最大長度為3位元組,只能表示BMP中的字符(0-0xffff),若要使用大于3位元組的字符(如emoji),則需使用utf8mb4字符集,
MySQL包含字符集和校對規則兩個概念,校對規則用來定義比較字串的方式,一種字符集至少有一種校對規則,但可以有多種校對規則,校對規則的命名以其相關的字符集名開始,中間通常包含一個語言名,并且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(比較是基于字符編碼的值而與語言無關)結束,如gbk_chinese_ci,
MySQL的字符集和校對規則有4個級別的設定:
- 服務器級:可通過組態檔或啟動選項設定,默認為latin1,
- 資料庫級:可通過
CREATE DATABASE或ALTER DATABASE設定,如資料庫中已存在記錄,修改字符集不會將已有資料按照新的字符集進行存放, - 表級:可通過
CREATE TABLE或ALTER TABLE設定,如表中已存在記錄,修改字符集不會將已有資料按照新的字符集進行存放, - 欄位級:可通過
CREATE TABLE或ALTER TABLE設定,如表中已存在記錄,修改字符集不會將已有資料按照新的字符集進行存放,
客戶端和服務器互動時,還存在客戶端、連接、回傳結果的字符集和校對規則,通常這三者是相同的,才可以確保資料能被正確讀取,可以通過SET NAMES charset同時修改這三個值,可以通過[_charset] 'str' [COLLATE collation]強制字串的字符集和校對規則,
已有記錄的字符集調整,需先將資料匯出,經過適當調整后重新匯入,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/16377.html
標籤:MySQL
下一篇:MySQL學習筆記(9):索引
