gpt4 book ai didi

c# - MySQL 字段在 LOAD DATA LOCAL INFILE 后从 VARCHAR(20) 更改为 INT

转载 作者:行者123 更新时间:2023-11-28 23:25:43 24 4
gpt4 key购买 nike

我在从本地加载 .csv 文件时遇到问题。我的字段已自行从 VARCHAR(20) 更改为 INT。我知道在使用了这个语法之后(这就是我想要的):

SELECT * FROM `len_enq_spph` WHERE po = '240000388';

返回null

但是如果我使用这种语法:

SELECT * FROM `len_enq_spph` WHERE po = 240000388;

它返回我想要的。

po 字段是 VARCHAR(20)。但是为什么那个字段在where子句中必须是INT呢?我的 csv 文件示例

id|order_id|ext_ord_ref|order_id2__1
1|160000402|110005678|240000388
2|160000402|110005678|240000388
3|160000402|110005678|240000388

这是我的 LOAD 语法:

LOAD DATA LOCAL INFILE 'c:\\temp\\SPPH.csv' INTO TABLE len_enq_spph
FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' IGNORE 1 LINES;

我尝试了特定的领域,但还是不行。

最佳答案

如果这是一个 MS-DOS 格式的 csv 文件,行终止符可能包含一个回车符。行终止符可能是 '\r\n'

当您指定 LINES TERMINATED BY '\n' 时,'\r' 字符将包含在最后一个字段中。

查看存储内容与文字之间差异的一种方法是使用 HEX 函数。像这样:

  SELECT HEX(q.po)         AS hex_po_col
, HEX('240000388') AS hex_literal
FROM len_enq_spph q
WHERE q.po = 240000388

与整数的比较“起作用”以匹配行,因为 MySQL 正在将 po 列隐式转换为数字。 MySQL 通过一个字符一个字符地读取直到它遇到一个使字符串不构成有效数字的字符来做到这一点。

作为另一个测试:

  SELECT HEX(q.po)         AS hex_po_col
FROM len_enq_spph q
WHERE q.po = '240000388\r'

也有可能是不同的或额外的“隐藏”字符加载到列中。

  SELECT HEX(q.po)         AS hex_po_col
FROM len_enq_spph q
WHERE q.po LIKE '240000388%'

如果您只想存储数值的有效表示,您可以更改 LOAD DATA 语句以将字段加载到中间用户定义的变量中,然后使用带有转换为数值的表达式的 SET 子句,清理它。

我只是根据 csv 文件的第一行猜测表中的其他列名...

 LOAD DATA LOCAL INFILE 'c:/temp/SPPH.csv'
INTO TABLE len_enq_spph
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
( `id`
, `order_id`
, `ext_ord_ref`
, @order_id2_1
)
SET `po` = @order_id2_1 + 0

关于c# - MySQL 字段在 LOAD DATA LOCAL INFILE 后从 VARCHAR(20) 更改为 INT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39442177/

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