本文共 795 字,大约阅读时间需要 2 分钟。
MariaDB中存储UTF-8字符串时出现了一个奇怪的错误:“Incorrect string value: ‘😃 …’ for column ‘summary’ at row 1”。尽管我使用了UTF-8编码的客户端、服务器以及数据库,保存的字符串“? …”也是合法的UTF-8字符,但问题仍然存在。
问题的根源在于MySQL的“utf8”编码实际上并非真正的UTF-8。与真正的UTF-8相比,“utf8”只支持每个字符最多三个字节,而UTF-8支持每个字符最多四个字节。因此,为了避免类似的问题,应该改用MySQL的“utf8mb4”编码。
以下是修复和优化数据库的步骤:
修改默认编码:
/etc/my.cnf文件,找到或添加以下配置:[client]default-character-set = utf8mb4[mysql]default-character-set = utf8mb4[mysqld]character-set-client-handshake = FALSEcharacter-set-server = utf8mb4collation-server = utf8mb4_unicode_ci
验证设置:
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character_set%';
修复和优化所有表:
mysqlcheck命令一次性完成:mysqlcheck -u root -p --auto-repair --optimize --all-databases
请注意:在MySQL中,永远不要使用“utf8”编码。如果您仍然遇到类似问题,请确保数据库和客户端都使用UTF-8mb4编码。
转载地址:http://qpai.baihongyu.com/