You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决MariaDB导入含特殊字符SQL脚本的'Incorrect string value'错误

解决MariaDB导入含特殊字符SQL脚本时的乱码/报错问题

以下是针对问题的可行解决方案,核心是保证脚本编码、客户端连接字符集、数据库/表字符集三者统一:

1. 明确导入时的客户端字符集

首先确认SQL脚本的实际编码(Linux下执行file -i your_script.sql查看,Windows可用Notepad++查看编码),假设脚本为UTF-8编码,导入时通过mysql命令直接指定字符集:

mysql -u 用户名 -p --default-character-set=utf8mb4 目标数据库 < your_script.sql

选用utf8mb4是因为它支持所有Unicode特殊字符(包括µ、°、NBSP等),比传统utf8兼容性更强。

2. 修正脚本内的字符集初始化语句

在脚本最开头添加完整的字符集配置语句,确保在所有数据插入操作前生效:

SET NAMES utf8mb4;
SET CHARACTER SET utf8mb4;
SET collation_connection = 'utf8mb4_unicode_ci';

如果脚本不是UTF-8编码,需将上述语句中的utf8mb4替换为脚本对应的编码(比如gbk),但优先推荐将脚本转存为UTF-8编码。

3. 验证数据库与表的字符集配置

检查数据库字符集

执行以下SQL确认目标数据库的字符集设置:

SHOW CREATE DATABASE 目标数据库;

确保输出中包含CHARACTER SET utf8mb4和COLLATE utf8mb4_unicode_ci(或兼容排序规则)。

检查表与字段字符集

执行以下SQL查看目标表的字符集:

SHOW CREATE TABLE 目标表;

重点确认存储特殊字符的字段(如varchar类型)的CHARSET为utf8mb4,避免使用latin1或旧版utf8。

4. 规范source命令导入的流程

如果使用MariaDB会话内的source命令导入,需先手动设置会话字符集再执行导入:

SET NAMES utf8mb4;
SOURCE your_script.sql;

直接粘贴语句能正常工作,是因为终端会话已经默认使用了正确的字符集,而source命令会继承当前会话的字符集配置,需手动指定。

5. 确保my.cnf配置生效

修改/etc/my.cnf后必须重启MariaDB服务,配置项需覆盖服务端和客户端:

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

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

重启后执行以下SQL验证配置是否生效:

SHOW VARIABLES LIKE '%character%';
SHOW VARIABLES LIKE '%collation%';

确保所有character_set_*相关项均为utf8mb4,collation_connection等项为utf8mb4_unicode_ci。

内容的提问来源于stack exchange,提问作者KenBun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:18:33