相关内容:
Mysql utf8 和utf8mb4 的区别
Mysql 批量更改数据表和字段的字符集(Mysql UTF-8字符集更改为utf8mb4字符集)
问题
在mysql中查询一条记录,然后使用equals判断如下:
// tableField 为mysql 表中的一个字段,tableField 的字段值为"" , 在使用equals的时候,发现为false
if ("".equals(tableField)) //false
问题原因
原因是因为java环境中的字符编码为UTF-8,mysql 中的字符编码也为UTF-8,但是mysql中的UTF-8却不是真正意义上的UTF-8。
utf8”只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。MySQL 一直没有修复这个 bug,他们在 2010 年发布了一个叫作“utf8mb4”的字符集,绕过了这个问题。
问题解决
把mysql中的表字符编码改为utf8mb4,问题解决。
怎么改
单个表改
ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
// 把对应的TABLE_NAME改为你需要改的表就可以了。
批量改
第一步:执行以下sql
SELECT
CONCAT(
'ALTER TABLE ',
TABLE_NAME,
' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;'
)
FROM
information_schema.`TABLES`
WHERE
TABLE_SCHEMA = 'DATABASE_NAME';
第二步把结果拷出来再执行
结尾
建议所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。不然很有可能出现编码的问题,而且这种问题定位比较困难。