在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 1sql文件的内容是: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 ('外套\\');  就是把其中的“大“去掉,就神奇的发现没有错误了,请问怎么会这样,各位哥哥姐姐能帮忙回答一下吗?研究了半天了

解决方案 »

  1.   

    一定要确定导出和导入所设置得--default-character-set=设置得一样
    导出用mysqldump
    导入用mysql
      

  2.   

    提示的是语法错误。
    你看你的字符串长度是不是真的跟你设置的一样。然后检查两个数据的字符类型是否一样。
    应该不是‘大’的问题。你看看取消掉斜杠,有没有问题。你看我这句: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')
    而实际上,我的数据成功的插入的数据库。
      

  3.   

    解决了,发现应该是source导入的一个bug,解决的办法是把INSERT INTO `test` VALUES ('大外套\\');  这个语句改成 INSERT INTO `test` VALUES ('大外套\\ '); 就是在“ \\' ”中间加一个空格。或者其他的东西。例如     “\\a'”,可以正常导入,很奇怪的一个问题