MySQL 5.6.23,InnoDB
我正在使用LOAD DATA INFILE
commnd 从字符分隔的文本文件中加载表格,并且我希望每个带有 a 的字段(此设置\N
中的NULL
字符)都将 aNULL
放在表格中。一些数字类型有这种行为,而另一些则放置一个0
. 我正在使用FIELDS TERMINATED BY
并且某些列确实可以正确获取NULL
值,因此它不是固定行格式问题。
这些是我在测试时观察到的类型:
INT
插入NULL
sDECIMAL(x,0)
插入NULL
sDECIMAL(x,y)
插入0.0
sFLOAT
插入0
sDOUBLE(x,y)
插入0.0
sDOUBLE
插入0
s
所有有问题的列都用 定义DEFAULT NULL
。我知道各种函数可以将这些0
s 转换为NULL
s。问题是是否存在可以处理小数精度并且还会NULL
在加载时插入 s 的数据类型。
此外,我看到一大堆与误解字符串、空字符串和空值之间的区别有关的问题。(示例 示例 )这不是问题,因为当我将其重新定义为 DECIMAL(x,0) 时,s 存在并正确加载到同一列中,然后在定义为 DECIMAL(x,3) 时不正确。NULL
非常简短的回答:没有创建新的数据类型来适应您。
当我们讨论这个主题时
让我们尝试简单的 SQL
这行得通吗???
好的。它适用于 SQL。你问的是
LOAD DATA INFILE
您提出了我回答的帖子:MySQL 在十进制字段中将“”插入为 0。如何阻止它?
让我们看看该错误是否在提交后得到解决。我将尝试复制该错误中不起作用的代码。
首先让我们从错误报告中创建该表
接下来,让我们做一些数据
让我们运行 LOAD DATA INFILE
哎哟,怎么回事
什么是 sql_mode ?
让我们清空 sql_mode,截断表并重新加载
让输入文件与
\N
错误报告一样让我们用 InnoDB 重复所有这些
我使用的是什么版本的 MySQL ???
Linux呢???
登录mysql并尝试...
今天的日期 ???
自提交错误报告以来已经一年零一周了,但没有任何改变。
My answer to MySQL is inserting "" as 0 in decimal fields. How to stop that? still stands as of today.
You need to do this test against MySQL 5.6.23 and see if something has changed.