最近在做數據遷移,原先有一個字段的類型爲clob,遷移後的字段類型爲varchar,blob轉化成字符串數據後,發現有emoji表情存在,導致數據遷移失敗。失敗的原因是mysql數據庫中設置的utf-8類型是3個字節,而emoji表情的utf-8是4個字節,所以無法傳入。
要使mysql能存儲emoji表情,需要數據庫的版本在5.5以上。
爲了解決問題,主要有兩種方式:
第一種方式是修改字段的編碼。
第二種方式是修改配置文件。
第一種方式:親測可用
1)修改對應表字段的編碼類型
ALTER TABLE table_name MODIFY COLUMN mark varchar(1000) CHARACTER
SET utf8mb4 COLLATE utf8mb4_unicode_ci
DEFAULT NULL COMMENT '備註';
再做如下設置:
SET NAMES utf8mb4;
之後再把clob類型轉成char類型[convert(mark,char)]插入表中的字段就可以了。
第二種方式:因爲缺乏測試環境,所以暫未測試
1)停止mysql數據庫
2 )修改 my.cnf或者mysql.ini
[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數據庫
4) 檢查字符集,更改其他的字符集
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
修改數據庫字符集:
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 column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;