首先說一下在mysql使用UTF-8時,應選擇utf8mb4而不是utf8,具體原因請看下方
之前在項目中向utf8編碼的mysql存儲數據時總是提示錯誤,經過很長時間才知道原因,mysql的utf8並不是4字節的UTF-8而是3字節的,原因是MySQL 從 4.1 版本開始支持 UTF-8,也就是 2003 年,而今天使用的 UTF-8 標準(RFC 3629)是隨後纔出現的。
舊版的 UTF-8 標準(RFC 2279)最多支持每個字符 6 個字節。2002 年 3 月 28 日,MySQL 開發者在第一個 MySQL 4.1 預覽版中使用了 RFC 2279。
同年 9 月,他們對 MySQL 源代碼進行了一次調整:“UTF8 現在最多隻支持 3 個字節的序列”。
是誰提交了這些代碼?他爲什麼要這樣做?這個問題不得而知。在遷移到 Git 後(MySQL 最開始使用的是 BitKeeper),MySQL 代碼庫中的很多提交者的名字都丟失了。2003 年 9 月的郵件列表中也找不到可以解釋這一變更的線索。
在這個不合法的字符集發佈了之後,MySQL 就無法修復它,因爲這樣需要要求所有用戶重新構建他們的數據庫。最終,MySQL 在 2010 年重新發布了“utf8mb4”來支持真正的 UTF-8。