一尘不染

将NULL值插入char(2)作为类型的数据库字段中

sql

如何NULL使用char(2)将值插入数据库字段(MySQL)?

在使用mysql_query数据库之前,我已经获得了以下值:NU

代替此值,应该是NULL

现在到我的代码。我正在逐行读取CSV。然后我做

    if(empty($data[$c])) {
        $data[$c] = NULL;
    }

如果我回显$ data [1],我得到NULL。然后,我准备好查询:

$stmt = $connection->prepare("INSERT INTO table (first, second, ..) VALUES (?, ?, ...)");
$stmt->bind_param("ss...", $data[0], $data[1], ...);
$res=$stmt->execute();

怎么了?

编辑:

根据Shiplu,我做了以下工作:

在不给出导致以下原因的最后参数的情况下执行此操作NU

$stmt = $connection->prepare("INSERT INTO employee (first, second, ...) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("sssssssssssssii", $data[0], $data[1], ..., $last);

使用default

$stmt = $connection->prepare("INSERT INTO employee (first, second, ..., last) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, default(last))");
$stmt->bind_param("sssssssssssssii", $data[0], $data[1], ...);

但是结果还是一样。char(2)字段的默认值为NULL。怎么可能?看来问题不在于查询。我认为最简单的解决方案是更新查询…

创建表:

CREATE TABLE IF NOT EXISTS `mytable` (
  `id` int(11) NOT NULL auto_increment,
  `text` varchar(128) default NULL,
  `no` int(11) default NULL,
  `problemfield` char(2) default NULL,
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `text` (`text`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=832 ;

阅读 226

收藏
2021-03-08

共1个答案

一尘不染

我发现了问题。我正在读取一个csv文件。该文件是用phpmyadmin导出的,其中包含NULL字符串。我的支票

if(empty($data[$c])) {
    $data[$c] = NULL;
}

还不够,因为它从未检查过string NULL。因此,解决方案是:

if(empty($data[$c]) || $data[$c]=='NULL') {
    $data[$c] = NULL;
}

所以安德鲁是对的。

2021-03-08