用Unicode迎接未來

     項目中使用了emoji,然後,問題產生了,後端MySQL數據庫無法存儲emoji字符,悲了個劇。
     emoji是Unicode字符集的子集,Unicode的使用應該很普遍了,怎麼會遇到這樣的問題呢?這還要從頭說起。
     Unicode是爲了解決全球字符的統一編碼,用這一個字符集就可以容納得下全球各語種的字符和特殊符號。與之對應的是GB-2312或GBK這樣的國標編碼,用於對中文字符進行編碼的。現在用GB-2312編碼越來越少了。
     但是Unicode只是二進制編碼,字符的轉換和傳輸還是需要再定義交換碼,這就是通常所說的UTF-8、UTF-16、UTF-32……用於對二進制格式的Unicode字符進行字符表示的編碼,最常用的是UTF-8。
     再來說UTF-8,它是變長的編碼,採用1-6個字節來編碼一個Unicode字符,比如Ascii碼就用1個字節,漢字通常用3個字節,emoji是4個字節。
     問題就出在這了。早期,MySQL支持3個字節的UTF8編碼存儲,所以一直相安無事。但是隨着Unicode的發展,emoji大量的使用,很多字符需要用4個字節的UTF8編碼才能表示了,於是出現了這些字符進入MySQL數據庫中被截斷或者是亂碼的現象。
     處理的辦法是把MySQL升級到5.5.4以上,升級字符集爲utf8mb4。
     就在今天,Unicode公佈了7.0新標準,至少新增了2834個字符,包括新的emoji表情符,以後要盯着Unicode了,用全球化眼光處理問題,未來會少一些麻煩。

——歡迎轉載,請註明原文出處 http://blog.csdn.net/caowenbin ——
——歡迎關注微信號“曹文斌的軟件思考”,共同探討軟件人生——
發佈了143 篇原創文章 · 獲贊 10 · 訪問量 94萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章