gpt4 book ai didi

MySQL - 插入零日期而不是默认日期

转载 作者:行者123 更新时间:2023-11-29 01:44:55 25 4
gpt4 key购买 nike

我有一个竖线分隔的文件,其中包含一些 NULL 日期字段。我将此数据加载到具有 NULL 日期默认值的临时表中。就我而言,我希望默认为 1950-01-01。但是,这些默认值似乎正在被覆盖,并且正在插入 0000-00-00。这是我编写的用于测试的快速 bash 脚本:

#!/bin/bash

CMD="CREATE TEMPORARY TABLE IF NOT EXISTS ar_tmp LIKE ar; LOAD DATA INFILE '/some/path/ar.txt' INTO TABLE ar_tmp FIELDS TERMINATED BY '|'; SELECT * FROM ar_tmp;"

mysql -uuser -ppassword db -e "$CMD" > /opt/rxdb/tmp.log

我已经 grep 我的源文件并确认预期的 NULL 日期有\N 并且文件中没有任何地方是模式 0000-00-00。

这是 ar_tmp 的结构:

Field                   Type            Null    Key     Default Extra
customer_code int(11) NO PRI 0
activity_date date NO PRI 1950-01-01
delivery_date date NO PRI 1950-01-01
sequence int(11) NO PRI 0
type varchar(10) YES NULL
due_date date YES 1950-01-01
original_charge float YES NULL
prior_alloc float YES NULL
current_alloc float YES NULL
future_alloc float YES NULL
open_balance float YES NULL
shipto_customer int(11) NO MUL 0
reference varchar(10) YES NULL
journal_ref_number int(11) YES NULL
next_month_flag int(11) YES NULL
journal_type varchar(15) YES NULL
activity_num int(11) YES NULL
document_path varchar(100) YES NULL
conditional_eft_approved char(1) NO N
customer_name varchar(30) YES NULL
allow_web_payment char(1) YES NULL
modify_date datetime NO 1950-01-01 12:00:00

默认设置为 activity_date、delivery_date 和 due_date。谁能解释一下这是怎么回事?

编辑:

源文件中的三行:

5830|2012-02-21|\N|29543|PAYMENT|\N|-600.5|0|0|0|-600.5|5830|505700|4807|0|Cash|0||N|TIME WARNE|N|2012-03-09 07:07:11
8057|2012-03-08|\N|32523|PAYMENT|\N|-1348.74|0|-1348.74|0|0|8057|1486|22|0|Cash|0||N|PACIFIC HA|N|2012-03-09 07:07:11
8103|2012-03-07|\N|32138|PAYMENT|\N|-1382.29|0|-1382.29|0|0|8103|3719|4|0|Cash|0||N|NORTH COUN|N|2012-03-09 07:07:11

对应的结果记录:

5830    2012-02-21      0000-00-00      29543   PAYMENT NULL    -600.5  0       0       0       -600.5  5830    505700  4807    0       Cash    0               N       TIME WARNE      N       2012-03-09 07:07:11
8057 2012-03-08 0000-00-00 32523 PAYMENT NULL -1348.74 0 -1348.74 0 0 8057 1486 22 0 Cash 0 N PACIFIC HA N 2012-03-09 07:07:11
8103 2012-03-07 0000-00-00 32138 PAYMENT NULL -1382.29 0 -1382.29 0 0 8103 3719 4 0 Cash 0 N NORTH COUN N 2012-03-09 07:07:11

最佳答案

如果 \N 被转换为一个空字符串,那么 INSERT 命令将使用它,而 DEFAULT 值将被忽略。

我的意思是:

INSERT INTO table(customer, date) VALUES ("123", "")

然后 date 将包含 0000-00-00。对于要使用的默认值,根本不应为日期传递任何内容:

INSERT INTO table(customer) VALUES ("123")

关于MySQL - 插入零日期而不是默认日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com