首页 > 解决方案 > MYSQL从文本文件输入加载空值

问题描述

我正在制作一个玩具应用程序,目的是了解 mysql 数据库,我试图将Magic The Gathering Cards 的属性存储为以下格式的记录:

mtgo_id | 卡名 | mana_cost | 厘米 | 卡类型 | oracle_text | card_power | card_toughness | 稀有

我无法使用LOAD DATA LOCAL INFILE. 我已经看到有关堆栈溢出的其他解决方案建议使用SET哪个工作,但是我想知道在解释有关转义字符的文档时我哪里出错了,因为我将我的空字段设置为 '\N',就像我的文本中的指示一样文件。

以下是文本文件中的示例记录:

82955    Disenchant      {1}{W}      2.0     Instant     Destroy target artifact or enchantment.     \N      \N      common

加载数据查询:

LOAD DATA LOCAL INFILE "/path/ZNRrecords.txt" INTO TABLE znrTake1 FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\r' STARTING BY ''

这会在我得到“N”而不是 null 的地方产生以下内容: 在此处输入图像描述

标签: mysql

解决方案


来自官方文档

反斜杠是 SQL 语句中字符串中的 MySQL 转义字符。

因此,在您从中加载的文件中,而不是只是为了将 Null 解析\N为.\\N\N

你也可以使用这个

LOAD DATA LOCAL INFILE "/path/ZNRrecords.txt"
INTO TABLE znrTake1
FIELDS TERMINATED BY '\t' 
ENCLOSED BY '' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\r'
STARTING BY ''
(mtgo_id, card_name, mana_cost, cmc, card_type, oracle_text, @vcard_power, @vcard_toughness, rarity)
SET
card_power = NULLIF(@vcard_power,'\N'),
card_toughness = NULLIF(@vcard_toughness,'\N');

推荐阅读