现象:
MySQL中原来的字符集为UTF8,某天业务中出现Emoji表情:😊(用户昵称包含、评论中包含),无法兼容导致报错。
原因:一个英文字符占用一个字节的存储空间,一个中文(含繁体)占用三个字节的存储空间,在MySQL中的“UTF8"编码只支持最大3字节每字符,而Emoji表情占4个字节。
解决方法:
MySQL中表和字段的字符集改为UTF8mb4。
解决过程:
1.具体修改语句如下,修改表默认字符集(包含已有列)
alter table shedlock CONVERT TO character set utf8mb4 COLLATE utf8mb4_bin;
如下语句仅修改表新增列的默认定义(不包含已有列)
alter table table_name character set utf8mb4;
扩展:
批量修改
SELECT
CONCAT(
'alter table ',
table_schema,
'.',
table_name,
' modify ',
column_name,
' ',
column_type,
' COLLATE utf8mb4_0900_ai_ci ',
' comment ''',
column_comment,
''';'
) AS cc
FROM
information_schema.`COLUMNS` a
WHERE table_schema = '数据库名'