【问题标题】:HeidiSQL import csv empty fieldsHeidiSQL 导入 csv 空字段
【发布时间】:2012-09-07 13:25:14
【问题描述】:

我想使用 HeidiSQL 将 csv 文件导入我的 MySQL 数据库。

但是我的一些字段是空的。

我该怎么做才能让 HeidiSQL 知道这些空值必须被视为 NULL 值?

csv 文件样本(最后 2 个字段未知):

    NULL;Students Corner;437452182;;

创建命令:

    CREATE  TABLE `db`.`customers` (
         `company_id` INT NOT NULL AUTO_INCREMENT ,
         `company_name` VARCHAR(40) NULL ,
         `company_number` INT NULL ,
         `company_vat` INT NULL ,
         `company_zip` INT NULL,
    PRIMARY KEY (`company_id`) );

我收到以下错误:

    Incorrect integer value: '' for column 'company_id' at row 1 */
    Incorrect integer value: '' for column 'company_vat' at row 1 */
    Incorrect integer value: '' for column 'company_zip' at row 1 */
    etc

【问题讨论】:

  • 从 CSV 发布 SHOW CREATE TABLE 和示例行
  • 您可以使用带有 SET 子句的 LOAD DATA INFILE 命令来实现 - 用 NULL 值替换空字符串。
  • 替换;;由 ;NULL;在您的 CSV 文件中,然后重试。

标签: mysql csv null heidisql


【解决方案1】:

如果通过在每个空字段中写入 \N 而不是写入 NULL 来解决它!

【讨论】:

  • 那很好。如果它是您使用的答案,请不要忘记接受您的答案。我仍然会说LOAD DATA INFILE 查询解决方案更好,因为人们并不总是可以选择在导入 CSV 文件之前对其进行预处理。编写查询允许您将所有这些逻辑放入单个脚本中,这意味着下次您可以将其作为单个命令运行,而不必担心检查文件的内容。
  • 哇,这个答案简直是救命稻草!我一直在尝试导入一个巨大的 CSV 文件(200k 行和 34 列),它一直让我发疯,因为它向我抛出有关 NULL 值的错误和警告。似乎使用\N 代替NULL 或者只是一个空白字段很有效! :)
  • Fields Escaped By 字符在 Heidi 中必须是 \ 才能识别该语法。
【解决方案2】:

您可以使用LOAD DATA INFILE 查询将 CSV 文件导入 MySQL。

在你的情况下,你会这样写:

LOAD DATA INFILE filename.txt
INTO TABLE customers
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
(@id, @name, @number, @vat, @zip)
SET
  company_id     = (CASE WHEN @id='' THEN NULL ELSE @id END),
  company_name   = (CASE WHEN @name='' THEN NULL ELSE @name END),
  company_number = (CASE WHEN @number='' THEN NULL ELSE @number END),
  company_vat    = (CASE WHEN @vat='' THEN NULL ELSE @vat END),
  company_zip    = (CASE WHEN @zip='' THEN NULL ELSE @zip END)

(您可能需要根据行尾标记等进行调整,但这应该非常接近您的需要)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2010-11-25
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多