MySQL错误1366 (HY000)是"Incorrect string value"错误,通常表示你尝试插入或更新数据时使用了数据库列不支持的字符编码。
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
UTF8MB4支持完整的Unicode字符集,包括emoji:
-- 修改数据库字符集
ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改表字符集
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改特定列字符集
ALTER TABLE your_table_name MODIFY your_column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
编辑/etc/my.cnf
或/etc/mysql/my.cnf
,在[mysqld]
部分添加:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
然后重启MySQL服务:
sudo systemctl restart mysql
确保客户端连接时也使用UTF8MB4:
SET NAMES utf8mb4;
或者在连接字符串中添加字符集参数(如使用JDBC):
jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=UTF-8
如果仍然有问题,检查你尝试插入的数据是否包含无效字符:
-- 查看导致问题的数据
SELECT HEX(your_column_name) FROM your_table_name WHERE your_column_name LIKE '%问题字符%';
如果问题仍然存在,请提供具体的错误信息和SQL语句,我可以给出更针对性的解决方案。