【MySQL 所遇问题】
- 总结:
- Error Code: 1064.You have an error in your SQL syntax
- 报错解释1:
- 报错解释2
- 处理过程
- Error Code:1366 - Incorrect string value:
- 报错解释
- 处理过程
总结:
Error Code: 1064
- 不可见字符。 某些文本处理软件可能会添加不可见的字符,从这些软件中复制过来的代码可能因此出现问题。
- 解决方案:尝试在纯文本编辑器(如 Notepad++ 或 Sublime Text)中 重新键入 SQL 语句,而不是复制粘贴。
- MySQL各版本服务器的语法区别。
Error Code: 1366
- 字符集不匹配。
- 解决方案:修改数据库、表的字符集;配置文件恢复默认。
Error Code: 1064.You have an error in your SQL syntax
报错解释1:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/* Navicat MySQL Data Transfer Source Server : 192.168.151.2 Source ’ at line 1
这条错误消息是MySQL数据库在尝试执行一个SQL语句时返回的,表明在你的SQL语句中存在语法错误。错误代码1064通常与SQL语法错误相关。
错误信息中提到的 '/* Navicat MySQL Data Transfer Source Server : 192.168.151.2 Source ’ 似乎是一个注释的开始部分,但注释的结束部分(*/)没有出现在错误信息中。不过,这个注释本身不应该导致语法错误,除非它后面紧接着的SQL代码有问题。
错误消息通常会在出错的SQL语句的附近位置给出提示。在你提供的情况下,看起来错误可能是在这个注释之前的某个地方
报错解释2
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO
tbl_dic_value
VALUES (‘06e3cbdf10a44eca8511dddfc6896c55’,‘虚’ at line 1
可以看出错误发生在尝试执行 INSERT INTO 语句时,并且错误位置在 'INSERT INTO 附近。然而,提供的错误消息似乎被截断了,因为它只显示了 ‘虚’ 而不是完整的插入值,这可能意味着错误消息没有完整复制或者复制过程中发生了某种格式问题。
此外,错误消息中似乎有一个不可见的字符 ‘’ 在 INSERT INTO 前面,这可能是一个隐藏的字符,比如 UTF-8 编码的字节顺序标记 (BOM)。在某些编辑器或文件传输过程中,可能会不小心引入这样的字符,它们会导致 SQL 语句无法被正确解析。
处理过程
此次碰见的这两种报错,我都通过
- 剪切首行(除首字母外);
- 删去首行至顶格;
- 敲出首字母,粘贴;
- 重新运行,成功。
Error Code:1366 - Incorrect string value:
Error Code:1366 - Incorrect string value: ‘\xE5\xBC\xA0\xE4\xB8\x89‘ for column ‘name‘ at row 1
报错解释
错误代码 1366
表示尝试将不正确的字符串值插入到列中。在您的情况下,错误信息表明在尝试将值 '\xE8\x99\x9A\xE5\x81\x87...'
插入到 tbl_dic_value
表的 value
列时发生了错误。这个值似乎是一个中文字符串的 UTF-8 编码表示,但是无法被正确插入。
可能的原因包括:
-
字符集不匹配:
value
列的字符集可能不支持您尝试插入的中文字符。例如,如果列被设置为latin1
字符集,那么它无法存储中文字符。您应该检查value
列的字符集,并确保它设置为支持中文的字符集,如utf8
或utf8mb4
。 -
校对规则不匹配:即使字符集正确,如果校对规则(collation)不支持中文字符,也可能导致问题。通常,使用
utf8mb4_unicode_ci
或utf8_general_ci
这样的校对规则可以处理大多数情况。 -
连接字符集:确保您的数据库连接也使用了正确的字符集。在连接到数据库时,您应该指定字符集为
utf8
或utf8mb4
。
要解决这个问题,您可以:
-
检查并修改列字符集:使用
ALTER TABLE
语句来修改value
列的字符集和校对规则。例如:ALTER TABLE tbl_dic_value MODIFY value VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
这里假设
value
列是VARCHAR(255)
类型,您可以根据需要调整类型和长度。 -
检查并修改连接字符集:在您的数据库连接字符串中,确保指定了正确的字符集。例如,如果您使用的是 MySQLi(PHP)或 JDBC(Java),您需要在连接时设置字符集。
-
检查并修改数据库和表的字符集:如果可能,您还应该检查并考虑修改整个数据库和表的默认字符集和校对规则。
在修改字符集和校对规则之前,请确保备份您的数据和数据库结构,以防止数据丢失或损坏。
最后,请注意,如果您正在使用的 MySQL 版本较旧,可能不支持 utf8mb4
字符集。utf8mb4
是用来完全支持 Unicode 的,包括 emoji 和某些不常见的字符。如果您的 MySQL 版本低于 5.5.3,那么您需要升级到较新的版本来使用 utf8mb4
。如果您的 MySQL 版本在 5.5.3 到 5.5.x 之间,您可能需要执行额外的步骤来启用 utf8mb4
支持。
处理过程
- 将数据库、表的字符集改为
utf8mb4
,collation设置为utf8_general_ci
; - 将数据库配置文件
my.ini
中的默认字符集删去。(默认为空,我自己之前设置了utf8,删去后’ utf8 ',sql文件运行成功)