MySQL 支持utf8mb4

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支持的字符集列表:


mysql-show-char-set.png

建議

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容