插件窝 干货文章 Linux中mysql的1366错误怎么解决

Linux中mysql的1366错误怎么解决

字符集 UTF8MB4 字符 数据库 350    来源:    2025-05-03

MySQL 1366错误解决方案

MySQL错误1366 (HY000)是"Incorrect string value"错误,通常表示你尝试插入或更新数据时使用了数据库列不支持的字符编码。

常见原因

  1. 客户端字符集与数据库/表/列字符集不匹配
  2. 尝试插入的字符不在当前字符集支持的范围内
  3. 表或列的字符集设置不支持某些特殊字符(如emoji)

解决方案

1. 检查当前字符集设置

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

2. 修改数据库/表/列字符集为UTF8MB4

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;

3. 修改MySQL配置文件

编辑/etc/my.cnf/etc/mysql/my.cnf,在[mysqld]部分添加:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

然后重启MySQL服务:

sudo systemctl restart mysql

4. 检查客户端连接设置

确保客户端连接时也使用UTF8MB4:

SET NAMES utf8mb4;

或者在连接字符串中添加字符集参数(如使用JDBC):

jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=UTF-8

5. 检查数据本身

如果仍然有问题,检查你尝试插入的数据是否包含无效字符:

-- 查看导致问题的数据
SELECT HEX(your_column_name) FROM your_table_name WHERE your_column_name LIKE '%问题字符%';

预防措施

  1. 新建数据库时始终使用UTF8MB4字符集
  2. 在应用程序连接数据库时明确设置字符集
  3. 避免混合使用不同字符集的表和列

如果问题仍然存在,请提供具体的错误信息和SQL语句,我可以给出更针对性的解决方案。