【问题标题】:mysql> error 1265: data truncated for column 'xxx' at row 1mysql> 错误 1265:第 1 行的列“xxx”的数据被截断
【发布时间】:2011-09-12 19:56:41
【问题描述】:

我正在尝试将 csv 文件导入 mysql 数据库中的表中。该表有 141 列,数据类型为INTVARCHAR(20)TIMESTAMPTIMESTAMP,然后是一系列TINYTEXTs 和VARCHAR(4)s。

我在数据类型为 VARCHAR(4) 的列上遇到 7 个数据截断错误,其中数据超过 4 个字符。

我试图强迫它继续使用IGNORE,但随后它发疯了,将其他单元格中的数据切碎并分散在整个表格中。

我正在使用 MS 2008 R2 服务器上的命令行来运行 SQL,并且 csv 文件位于 Db 的目录中。

附:我确实阅读了与 mysql+import 或 mysql+data truncated (1265) 相关的其他几篇文章和谷歌搜索结果,但它们似乎没有涵盖这个特定问题。

谢谢!

编辑:我很确定它与LOAD DATA 函数有关,因为如果我一次INSERT 一行,它就可以正常工作……

我的导入 sql 是:

LOAD DATA INFILE '2011-09.csv' IGNORE INTO TABLE `survey`.`2011-09` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

【问题讨论】:

  • 100+ varchar/text 列,你在这个表中存储了什么?闻起来像糟糕的数据库设计
  • 来自 120 个问题的调查结果。他们以前有一个包含 628 个文本列的表格;不用说有很多废话。
  • VARCHAR 列使用的字符编码是什么?
  • 每个问题有一列听起来很奇怪/有代码味道。您可能会看到在数据库中单独的问题表中每个问题有一行的好处。如果您正在重构,现在可能是进行重大更改的好时机。只是一个想法。
  • UTF8(与表默认相同)

标签: mysql csv import


【解决方案1】:

INSERT 期间,如果列太多,MySQL 会告诉您。但显然 MySQL 不是很友好:在 LOAD 期间,它确实告诉你列是否太多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多