https://my.oschina.net/u/3209870/blog/888204
修改表的某一个字段支持:
1 2 3 4 5 6 |
select concat('ALTER TABLE ',TABLE_NAME,' MODIFY COLUMN ', COLUMN_NAME,' text CHARACTER SET utf8mb4 NULL;') from information_schema.COLUMNS WHERE TABLE_SCHEMA='dbName' AND COLUMNS.DATA_TYPE='text' --用于构造下面语句 ALTER TABLE CMS_COMMENT MODIFY COLUMN CONTENT text CHARACTER SET utf8mb4 NULL; |
原文:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
描述:由于字符集不支持的异常,因为utf-8编码有可能是两个、三个、四个字节, 其中Emoji表情是四个字节,而MySQL的utf-8编码最多三个字节,所以导致数据插不进去。 utf8mb4的最低mysql版本支持版本为5.5.3+ 方式1:修改数据库层面 查看数据库字符集: SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%'; 保证character_set_client/character_set_connection/character_set_database/character_set_results/character_set_server为utf8mb4。 步骤1:修改数据库的字符集编码(database, table, column) -- 修改database字符集编码 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 VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 步骤2:修改MySQL的配置文件(my.ini/my.cnf),需重启MySQL(mysql restart) [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-connector-java >5.1.13,否则仍然无法使用utf8mb4 其中的characterEncoding=utf8可以自动被识别为utf8mb4 jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE 方式2:应用层转码和编码 URLEncoder.encode(emoji, "utf-8"); URLEncoder.decode(emoji, "utf-8"); |