emoji 表情字元插入的配置,emoji表情字元插入
最近做的項目中,在插入 �� 字元時報錯了
ERROR 1366: 1366: Incorrect string value: '\xF0\x9D\x8C\x86' for column 'vl' at row 1
在苦苦掙紮了數小時後將其解決掉了~~ 只要將 utf8 轉到 utf8mb4 就好了
這個問題其實不是那麼難,之所以花了比較長的時間來解決主要還是由於對於 MySQL 的配置不是很清楚,還好使用的資料庫版本是 5.5.39,因為夠幸運 在版本MySQL 5.5.3 (released in early 2010)時,剛好MySQL 支援了 utf8mb4 字元集。
具體 utf8 和 utf8mb4 的區別,可以參考https://mathiasbynens.be/notes/mysql-utf8mb4
下面把相應的解決方案貼出來,感謝大牛無處不在啊~~
要處理這樣的狀況肯定少不了更改 /etc/mysql/my.cnf 檔案咯,具體檔案的位置根據自己的配置尋找吧。
我們查看下 MySQL Server 現有的字元集吧
這是我現在資料庫的配置
接下來我們在 my.cnf 中添加以下配置
[client]default-character-set=utf8mb4[server]character_set_server=utf8mb4
配置後的情況
可以看到配置中的 client、connection、database、result、server 都是 utf8mb4 了。到這裡其實就完成了 90%,只要驗證下就知道了。
很好,沒有報錯,接下來進行查詢,可以看看是否能夠正常顯示
這一步也正確!
這樣我們對於資料庫的配置也算完成了,不過還要注意的一個問題就是當前操作的資料庫、資料表、欄位同樣是需要支援 utf8mb4 的
# 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(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
all done!
在做這個更改的過程中我其實同時使用了 mysql-workbench 和 mysql 進行訪問的, 但是奇怪的是
SHOW VARIABLES LIKE '%character%'
在 mysql 命令下顯示的是本機資料庫的配置,而在 mysql-workbench 中的卻不是,相當鬱悶啊~~
可以看到 client、connection 等沒有被更改為 utf8mb4, 不知道是不是 mysql-workbench 是否還有其他的配置,遺憾的是還沒有找到具體的配置方案,不過呢,作為臨時的解決方案,可以通過以下的命令來處理
SET NAMES utf8mb4
這樣感覺相當方便啊,一下子全給改掉了,不過不是持久的~~
~~噢噢,暫給出此種方案,知道原因的帥哥靚妹還望給個提示呢 ^_^