關於移動裝置 表情符號的資料庫儲存 與 utf8 與utf8mb4 字符集

babyyellow發表於2015-03-05
我們的一些業務系統最近出現了一種情況,尤其是新版的ios 裝置,在釋出訊息時,使用了表情符號時,

對gbk 字符集的資料庫,寫入資料庫的資料,在回顯時,變成 ‘口口’ 無法回顯,

對utf8 字符集的資料庫,則根本無法寫入資料庫,客戶端程式直接報 java.io.exception xxxxxxxx. 






原因在哪裡呢? 


各種移動裝置,各種不同的輸入法,都會自帶一些增強版的'bmp' 表情符號。 

這些表情符號編碼為 4個位元組的 字元,  utf8 字符集目前只支援1-3 個位元組的字元,導致資料無法入庫。 

解決方案  有兩種: 

1.  遍歷輸入的文字,把四位元組長度的字元,修正為自定義的字元替換掉,有一定的工作量。 

2.  修改資料庫字符集, 把資料庫字符集從utf8 修改為支援1-4 個位元組字元的utf8mb4 

     mysql 從 5.5.3 版本開始支援 utf8mb4 字符集 , 從 mysql 5.5.3 之後版本基本可以無縫升級到 utf8mb4 字符集。 

3.升級方案: 

1)  修改資料庫字符集character-set-server=utf8mb4   重啟資料庫生效。 

2)  修改database  的字符集為 utf8mb4  alter  database  dbname  character  set utf8mb4 

3)    修改表的字符集   為utf8mb4 , alter  table  character set = utf8mb4 


4. 需要注意的一些點。 

 1)  innodb 索引只能支援 767 的位元組,對utf8 大約可以為255 字元做索引,  對utf8mb4 就只有 191 個字元了,你的索引可能要重新定義。 

2) 你的char  varchar 的欄位定義可能要重新定義或者修改為 text 型別。 

3)  utf8mb4 是utf8 的一個超集, utf8 字元的編碼,位置, 儲存  在utf8mb4 與utf8 字符集裡一樣的,不會對有現有資料帶來損壞。 

4) 謹慎起見,請詳細測試你的應用對該字符集的相容性問題。 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-1448920/,如需轉載,請註明出處,否則將追究法律責任。

相關文章