我有一个文本数据xxx.txt,格式如下:
"1","xxx","yyyy","zzzzz"
"2,"aaaa","bbbb","ccccc"
"3","dddd",""eeee"","ffff"
"4","kkkk","lllll","mmmmm","nnnnn"
我使用如下语句导入数据库中:
LOAD DATA INFILE 'xxx.txt' INTO TABLE dhyhls
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
执行时,总提示
ERROR 1261 (01000):Row 3 doesn't contain data for all colums
我知道问题在于第3行""eeee""引起的问题,
可是该文本文件是自动生成的,行数可能达到数万行,我不可能去逐行查找修改,而且我也希望将"eeee"直接读入数据库中,应该怎么办?

解决方案 »

  1.   

    ""eeee"" 有问题,你需要处理一下。
      

  2.   

    我知道""eeee"" 有问题,但是该文本是自动生成的,有数万条记录,我没办法逐个找,逐个修改。
    用mysql语句处理,有好办法吗?
      

  3.   

    在 MySQL 中使用 load data infile 命令导入数据文件到 MySQL 数据库中的时候,如果遇到 MySQL 错误:“ERROR 1261 (01000)” ,则很可能是由于数据文件中的列数跟 MySQL 数据表字段数目没有完全匹配,并且 sql_mode 设为 strict 模式的缘故。要想在这种情况下继续导入数据到 MySQL 表中,则需要设置 MySQL sql_mode 变量。把“strict_trans_tables” 从 sql_mode 中去掉,如下:
    查看 MySQL 当前连接的 sql_modemysql> show variables like 'sql_mode';+---------------+----------------------------------------------------------------+
    | Variable_name | Value                                                          |
    +---------------+----------------------------------------------------------------+
    | sql_mode      | strict_trans_tables,no_auto_create_user,no_engine_substitution |
    +---------------+----------------------------------------------------------------+设置 MySQL sql_mode,使其不包含 “strict_trans_tables” mode找到办法了,呵呵。
    set sql_mode='';这样,就可以利用 MySQL load data infile,继续向 MySQL 中导入数据了。否则,MySQL 会终止导入过程,并抛出下面几种错误信息:ERROR 1261 (01000): Row 1 does not contain data for all columns
    ERROR 1262 (01000): Row 1 was truncated; it contained more data than there were input columns 本文由 www.sqlstudy.com 原创,版权所有,转载请注明作者和出处!
      

  4.   

    也可以用vim+grep 将所有的""替换为"