感謝偉大的網絡,給我們帶來了很多有用的信息
然后開始 項目需要給app提供接口,發現IOS開發存儲Emoji表情失敗,或者亂碼,在這里給自己留個記錄以及給大家帶來一些參考
首先是字符集的問題,mysql字符集大多數使用的是utf8,需要把字符集更換成utf8mb4,因為UTF-8編碼有可能是兩個、三個、四個字節。Emoji表情是4個字節,而Mysql的utf8編碼最多3個字節,utf8mb4則擴展到一個字符最多能有4字節,並且兼容utf8
在mysql終端查看下mysql當前版本所支持的字符集,據說mysql 5.5.3版本上才會支持utf8mb4,我沒核對;
1 show charset;
1. 修改database,table,column字符集mysql語句如下
# For each database: ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; # For each table: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # For each column: ALTER TABLE table_name CHANGE column_name column_name VARCHAR(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
2. 修改my.cnf
[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'
3.重啟mysql,檢查字符集
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------
這樣mysql數據庫就支持Emoji表情的存儲了
如果你的php項目存儲Emoji表情會出現亂碼,那么把你php連接Mysql數據庫的字符編碼換成 utf8mb4
另外Mariadb數據庫同樣可以這樣設置
