首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 8.0不能将空值插入日期字段

问MySQL 8.0不能将空值插入日期字段
EN

Database Administration用户
提问于 2019-06-04 16:29:32
回答 2查看 7.1K关注 0票数 2

我试图使用InnoDB引擎将文件中的数据插入到MySQL8.0。

我使用这个查询:

代码语言:javascript
复制
LOAD DATA INFILE '/var/lib/mysql-files/item_new_1_4.dat'
INTO TABLE Item FIELDS TERMINATED BY '|';

我收到一条错误消息:

代码语言:javascript
复制
ERROR 1292 (22007) at line 1: Incorrect date value: 'NULL' for column 'i_rec_end_date' at row 1

表是由以下查询创建的:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS Item(
    i_item_sk integer ,
    i_item_id char(16) NOT NULL,
    i_rec_start_date date,
    i_rec_end_date date,
    i_item_desc varchar(200),
    i_current_price decimal(7,2),
    i_wholesale_cost decimal (7,2),
    i_brand_id integer,
    i_brand char(50),
    i_class_id integer default ,
    i_class char(50),
    i_category_id integer,
    i_category char(50),
    i_manufact_id integer,
    i_manufact char(50),
    i_size char(20),
    i_formulation char(20),
    i_color char(20),
    i_units char(10),
    i_container char(10),
    i_manager_id integer,
    i_product_name char(50),
    PRIMARY KEY (i_item_sk)
);

第1行的数据是:

代码语言:javascript
复制
1|AAAAAAAABAAAAAAA|1997-10-27|NULL|Powers will not get influences. Electoral ports should show low, annual chains. Now young visitors may pose now however final pages. Bitterly right children suit increasing, leading el|27.02|23.23|5003002|exportischolar #2|3|pop|5|Music|52|ableanti|N/A|3663peru009490160959|spring|Tsp|Unknown|6|ought|
EN

回答 2

Database Administration用户

回答已采纳

发布于 2019-06-04 16:47:45

这是因为MySQL实际上试图将文字字符串'NULL‘插入日期列,而不是实际值NULL。

你们的选择是:

  • 全局搜索文件中的|NULL|并将其替换为||
  • 更改您的LOAD DATA语句以处理它:

将数据INFILE‘/var/lib/mysql-file/ Item _new_1_4.dat’加载到表项字段中,该字段的结尾为“AC.26”(i_item_sk整型,i_item_id,i_rec_start_date,@i_rec_end_date,i_item_desc,i_current_price,i_wholesale_cost,i_brand_id,i_brandi_class_id,i_class,i_category_id,i_category,i_manufact_idi_manufact,i_size,i_formulation,i_color,i_unitsi_container,i_manager_id,i_product_name )集i_rec_end_date =NULL(@i_rec_end_date,'NULL');

票数 3
EN

Database Administration用户

发布于 2019-06-04 23:27:54

计划A:见菲尔的回答

B计划:

SHOW VARIABLES LIKE 'sql_mode';

然后考虑在做LOAD之前更改与日期相关的设置(S)。也许在清理完数据后再把它改回来。

C计划:

LOAD到一个单独的表中,该列有一个VARCHAR。然后从它填充“真实”表,将"NULL" (或其他什么)修复到任何东西。其他需要清理的列也是如此。

计划D:(短于C,但对清洁功能不强):

在LOAD中使用@变量,加上带有表达式的SET来设置列,不管您想要什么,而不是空值。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/239797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档