標籤:bsp app flow mysql5.5 convert 表情 字元集設定 自己 用戶端
一、問題及原因
APP產品想對Emoji進行支援,但發現mysql資料庫無法寫入表情。原因是我們的mysql資料庫預設用的是utf8編碼,utf8編碼儲存時用的是三個位元組,但Emoji表情是4個位元組,所以導致了資料插入異常。
原因找到了就很好辦,mysql5.5.3之後的版本支援utf8mb4編碼,這種編碼是utf8的升級版,用的是4個位元組進行儲存。所以需要做的就是把mysql字元集從utf8升級為utf8mb4就行了。
二、升級步驟1、備份資料庫
雖然utf8mb4相容utf8,但最好還是作個Database Backup。
2、升級mysql版本到5.5.3以上
這個就不說了,根據你的伺服器系統做mysql升級。
3、修改伺服器上mysql預設編碼,修改資料庫、表、列的字元集為utf8mb4
修改伺服器上mysql設定檔my.conf(如ubuntu為例,一般在/etc/mysql/my.conf):
[client] #xxx 已有配置default-character-set = utf8mb4[mysql]#xxx 已有配置default-character-set = utf8mb4[mysqld]#xxx 已有配置character-set-client-handshake = FALSEcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ciinit_connect=‘SET NAMES utf8mb4‘
改完要重啟mysql。
修改資料庫、表、列字元集:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
這裡看到沒有修改列的字元集,因為我試過後發現,改了表的字元集後,表中列的字元集自動修改為utf8mb4了。
改完可以查看一下:
這裡要確保紅框內變數值是utf8mb4。
可以看到列的字元集已經改過來了。
4、檢查列的最大長度及索引
這個就根據情況自己檢查調整了。
5、修改用戶端串連程式編碼
把代碼中串連資料庫時的字元集設定為utf8mb4即可
參考文章:
1、How to insert utf-8 mb4 character(emoji in ios5) in mysql?
2、1190000000616820
讓mysql支援emoji表情