摘要:最近公司一個舊的項目需要支持表情,一開始以為只要修改下數據庫的表字段就好,沒想到引發(fā)了一系列的問題。將操作結果從內部操作字符集轉換為響應請求。
最近公司一個舊的項目需要支持 emoji 表情,一開始以為只要修改下數據庫的表字段就好,沒想到引發(fā)了一系列的問題。這里總結下,以作備忘。
01 MySQL 字符集設置
系統(tǒng)變量:
character_set_server: 默認的內部操作字符集
character_set_client: 客戶端來源數據使用的字符集
character_set_connection:連接層字符集
character_set_results: 查詢結果字符集
character_set_database: 當前選中數據庫的默認字符集
character_set_system: 系統(tǒng)元數據(字段名等)字符集
02 MySQL 中的字符集轉換過程
MySQL Server收到請求時將請求數據從 character_set_client 轉換為character_set_connection;
進行內部操作前將請求數據從 character_set_connection 轉換為內部操作字符集,其確定方法如下:
使用表中字段的 CHARACTER SET 設定值;
若上述值不存在,則使用對應數據表的 DEFAULT CHARACTER SET 設定值(MySQL擴展,非SQL標準);
若上述值不存在,則使用對應數據庫的 DEFAULT CHARACTER SET 設定值;
若上述值不存在,則使用 character_set_server 設定值。
將操作結果從內部操作字符集轉換為 character_set_results, 響應請求。
03 MySQL 啟動配置文件 my.cnf
default-character-set: 設置 mysql 命令行連接的默認字符集
character-set-server: 設置系統(tǒng)內部操作字符集(即上文說到的character_set_server)
collation_server: 設置系統(tǒng)默認字符集排序
04 PHP連接 MySQL(以PDO連接方式為例)
常見的兩種設置字符集的方式
mysql:host=localhost;dbname=db_demo;charset=utf8mb4
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"
05 總結
數據表字段的字符集需要是utf8mb4,這個是剛需
一般 character_set_client、character_set_connection、character_set_results 的字符集相同,且都為utf8mb4(這三個參數默認都是utf8mb4,如果不是,是實現不了 emoji 表情的,原因參照字符集轉換過程)。
連接數據庫的字符集也需要是utf8mb4
character_set_server、character_set_database 等默認字符集的類型并沒有那么重要,但最好還是保持一致
TP 的坑果然是多,遠離TP
參考
http://www.laruence.com/2008/...
http://stackoverflow.com/ques...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/22531.html
摘要:前言最近開發(fā)的項目因為需要用戶文本的存儲,自然就遇到了等表情符號如何被支持的問題。問題描述如果字符集且是服務器的話,當存儲含有表情時,會拋出類似如下異常這就是字符集不支持的異常。升級步驟的最低版本支持版本為,若不是,請升級到較新版本。 ? 前言: 最近開發(fā)的iOS項目因為需要用戶文本的存儲,自然就遇到了emoji等表情符號如何被mysql DB支持的問題。困擾了數日,在就要絕望放棄...
摘要:中無法存儲字符,源自于之前編碼只支持最大個字節(jié),而需要個字節(jié)。事實上,如果只是某個列存在字符的存儲問題,那就只需要修改這個列的編碼類型即可。這涉及到應用與建立連接的問題。有一條命令是,會將的編碼統(tǒng)一設置。使用這條命令便可以達到我們的目的。 MySQL中無法存儲Emoji字符,源自于MySQL 5.5之前utf8編碼只支持最大3個字節(jié),而Emoji需要4個字節(jié)。從MySQL 5.5開始,...
閱讀 2473·2021-11-23 09:51
閱讀 533·2019-08-30 13:59
閱讀 1834·2019-08-29 11:20
閱讀 2541·2019-08-26 13:41
閱讀 3249·2019-08-26 12:16
閱讀 740·2019-08-26 10:59
閱讀 3335·2019-08-26 10:14
閱讀 607·2019-08-23 17:21