MySQL 支持utf8mb4

utf8mb4 utf8mb3 utf8

Refer to


MySQL在 5.5.3 之後增加了 utf8mb4 字符編碼,mb4即 most bytes 4。簡單說 utf8mb4 是 utf8 的超集並完全兼容utf8,能夠用四個字節存儲更多的字符。

而utf8 是 utf8mb3 的別名。標準的 UTF-8 字符集編碼是可以用 1~4 個字節去編碼21位字符,但是MySQL其實實現的utf8只是使用3個字節而已, utf8mb4纔是真正意義上的 utf8

如果數據庫表字段設置的字符集不是utf8mb4,卻插入類似emjoy表情的時候:

  • 嚴格模式 下會出現 Incorrect string value: /xF0/xA1/x8B/xBE/xE5/xA2… for column 'name' 這樣的錯誤
  • 非嚴格模式下此後的數據會被截斷

排序字符集

Refer to: Collation Naming Conventions

Suffix Meaning Remark
_ai Accent insensitive
_as Accent sensitive
_ci Case insensitive 不分區大小寫
_cs case-sensitive 區分大小寫
_bin Binary 二進制存儲,區分大小寫

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準確度高,但校對速度稍慢。

數據庫一般默認選擇 utf8mb4_general_ci ;
如果你的應用有德語、法語或者俄語,請一定使用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)

總結

  • mysql 版本 5.5.3+
  • MySQL Connector/J Java驅動5.1.13+
  • /etc/my.cnf 配置中 添加配置,詳見上面
  • 排序字符集選用 utf8mb4_unicode_ci
  • 列(字段)> 表 > 數據庫

備註:
其實只要數據庫支持utfbmb4(show char set),及時MySQL配置(/etc/my.cnf)中配置的默認字符集是utf8,也可以直接指定數據庫、表、字段的字符集爲utf8mb4,然後在連接的時候指定字符集爲utf8mb4即可。
比如設置Java的連接參數中characterEncoding=utf8mb4

查看MySQL支持的字符集列表:


建議

數據庫在設置字符集的時候,設置成utf8mb4格式!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章