【問題描述】
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect string value: '\xF0\x9F\x8E\x89' for column 'title' at row 1
【問題原因】
數據庫中有的表字段,有4個字節而mysql的utf8字符集最大只支持3個字節,因而出錯。
【解決方法】
在mysql中有一個utf8字符集的超集utf8mb4,該字符集允許存儲的字符最多為4個字節,那么它就可以滿足對Emoji表情的存儲。所以我們只需要將對應的字符集改為utf8mb4即可。
原有字符集可以通過以下方式查看:
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; |
修改my.cnf配置
character_set_server=utf8mb4 collation-server=utf8mb4_unicode_ci |
簡單一點,這個時候可以直接將整庫刪除后重建。
如果庫中已經有業務數據,可以通過以下方式修改。
-- 修改整庫的字符集 ALTER DATABASE <database_name> CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci
-- 修改表的字符集 ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改單個字段的字符集 ALTER TABLE <table_name> CHANGE src_column_name <target_column_name> VARCHAR(600) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |