utf8mb4 utf8mb3 utf8
Refer to
MySQL在 5.5.3 之后增加了 utf8mb4 字符編碼泳猬,mb4即 most bytes 4蛛枚。簡單說 utf8mb4 是 utf8 的超集并完全兼容utf8,能夠用四個字節(jié)存儲更多的字符昭伸。
而utf8 是 utf8mb3 的別名。標(biāo)準的 UTF-8 字符集編碼是可以用 1~4 個字節(jié)去編碼21位字符悬襟,但是MySQL其實實現(xiàn)的utf8只是使用3個字節(jié)而已爽待, utf8mb4才是真正意義上的 utf8
。
如果數(shù)據(jù)庫表字段設(shè)置的字符集不是utf8mb4慕的,卻插入類似emjoy表情的時候:
- 嚴格模式 下會出現(xiàn) Incorrect string value: /xF0/xA1/x8B/xBE/xE5/xA2… for column 'name' 這樣的錯誤
- 非嚴格模式下此后的數(shù)據(jù)會被截斷
排序字符集
Refer to: Collation Naming Conventions
Suffix | Meaning | Remark |
---|---|---|
_ai | Accent insensitive | |
_as | Accent sensitive | |
_ci | Case insensitive | 不分區(qū)大小寫 |
_cs | case-sensitive | 區(qū)分大小寫 |
_bin | Binary | 二進制存儲,區(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校對速度快挤渔,但準確度稍差肮街。
- utf8_unicode_ci準確度高,但校對速度稍慢判导。
數(shù)據(jù)庫一般默認選擇 utf8mb4_general_ci
;
如果你的應(yī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ū)動5.1.13+
- /etc/my.cnf 配置中 添加配置眼刃,詳見上面
- 排序字符集選用 utf8mb4_unicode_ci
- 列(字段)> 表 > 數(shù)據(jù)庫
備注:
其實只要數(shù)據(jù)庫支持utfbmb4(show char set)绕辖,及時MySQL配置(/etc/my.cnf)中配置的默認字符集是utf8,也可以直接指定數(shù)據(jù)庫擂红、表仪际、字段的字符集為utf8mb4,然后在連接的時候指定字符集為utf8mb4即可。
比如設(shè)置Java的連接參數(shù)中characterEncoding=utf8mb4
查看MySQL支持的字符集列表:
建議
數(shù)據(jù)庫在設(shè)置字符集的時候树碱,設(shè)置成utf8mb4
格式肯适!