utf8mb4 utf8mb3 utf8
Refer to
MySQL在 5.5.3 之后增加了 utf8mb4 字符編碼,mb4即 most bytes 4。簡單說 utf8mb4 是 utf8 的超集并完全兼容utf8,能夠用四個(gè)字節(jié)存儲(chǔ)更多的字符。
而utf8 是 utf8mb3 的別名。標(biāo)準(zhǔn)的 UTF-8 字符集編碼是可以用 1~4 個(gè)字節(jié)去編碼21位字符,但是MySQL其實(shí)實(shí)現(xiàn)的utf8只是使用3個(gè)字節(jié)而已, utf8mb4才是真正意義上的 utf8。
如果數(shù)據(jù)庫表字段設(shè)置的字符集不是utf8mb4,卻插入類似emjoy表情的時(shí)候:
- 嚴(yán)格模式 下會(huì)出現(xiàn) Incorrect string value: /xF0/xA1/x8B/xBE/xE5/xA2… for column 'name' 這樣的錯(cuò)誤
- 非嚴(yán)格模式下此后的數(shù)據(jù)會(huì)被截?cái)?/li>
排序字符集
Refer to: Collation Naming Conventions
| Suffix | Meaning | Remark |
|---|---|---|
| _ai | Accent insensitive | |
| _as | Accent sensitive | |
| _ci | Case insensitive | 不分區(qū)大小寫 |
| _cs | case-sensitive | 區(qū)分大小寫 |
| _bin | Binary | 二進(jìn)制存儲(chǔ),區(qū)分大小寫 |
utf8mb4_ unicode_ ci VS utf8mb4_ general_ ci
Refer to: What's the difference between utf8_general_ci and utf8_unicode_ci
- utf8_general_ci校對(duì)速度快,但準(zhǔn)確度稍差。
- utf8_unicode_ci準(zhǔn)確度高,但校對(duì)速度稍慢。
數(shù)據(jù)庫一般默認(rèn)選擇 utf8mb4_general_ci ;
如果你的應(yīng)用有德語、法語或者俄語,請(qǐng)一定使用utf8mb4_unicode_ci
配置
vim /etc/my.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
# character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
檢查目前MySQL的字符集
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+-----------------+
| Variable_name | Value |
+--------------------------+-----------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+--------------------------+-----------------+
10 rows in set (0.00 sec)
總結(jié)
- mysql 版本 5.5.3+
- MySQL Connector/J Java驅(qū)動(dòng)5.1.13+
- /etc/my.cnf 配置中 添加配置,詳見上面
- 排序字符集選用 utf8mb4_unicode_ci
- 列(字段)> 表 > 數(shù)據(jù)庫
備注:
其實(shí)只要數(shù)據(jù)庫支持utfbmb4(show char set),及時(shí)MySQL配置(/etc/my.cnf)中配置的默認(rèn)字符集是utf8,也可以直接指定數(shù)據(jù)庫、表、字段的字符集為utf8mb4,然后在連接的時(shí)候指定字符集為utf8mb4即可。
比如設(shè)置Java的連接參數(shù)中characterEncoding=utf8mb4
查看MySQL支持的字符集列表:

建議
數(shù)據(jù)庫在設(shè)置字符集的時(shí)候,設(shè)置成utf8mb4格式!