日期:2014-05-16  浏览次数:20706 次

一个奇怪的问题,如何解决呢?
在linux下用 source 把一个有10几万数据的 sql 文件(mysqldump生成的)导入到mysql 5.1.48 中 出现下面的错误


ERROR 1064 (42000): 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 '...')' at line 1

sql文件的内容是:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `test`
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `str` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES ('大外套\\');
......中间的sql省略
INSERT INTO `test` VALUES ('大牌饰品;零售');


这个sql文件用 /usr/local/mysql/bin/mysql -u root -p --default-character-set=utf8 -f abc < /root/test.sql 这种办法可以正常导入,但是使用source导入的时候会发生错误。另外单独导入这2个insert语句均不会出现错误。经过分析发现要形成这个错误需要满足几个条件

1.前面的一个 sql语句中有 " \\' "这种内容在结尾
2.后面某一个sql语句中有含有 " ; "

另外如果把前面的insert语句中改成 INSERT INTO `test` VALUES ('外套\\'); 就是把其中的“大“去掉,就神奇的发现没有错误了,请问怎么会这样,各位哥哥姐姐能帮忙回答一下吗?研究了半天了

------解决方案--------------------
一定要确定导出和导入所设置得--default-character-set=设置得一样


导出用mysqldump


导入用mysql

------解决方案--------------------
提示的是语法错误。
你看你的字符串长度是不是真的跟你设置的一样。然后检查两个数据的字符类型是否一样。
应该不是‘大’的问题。你看看取消掉斜杠,有没有问题。

你看我这句:Insert into km_tbl_systemparameter(ParameterName, ParameterValue, ParameterDescription) values('xxx5','aaaaa', 'bbbaaaa');插入一个表,但是也提示这样的信息:
(Error) VALUES
('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 km_tbl_systemparameter(ParameterName, ParameterValue, ParameterDescr'' at line 1')
而实际上,我的数据成功的插入的数据库。