Вставьте значение NULL в поле базы данных с символом char (2) как тип

Как вставить значение NULL в поле базы данных (MySQL) с char (2)?

Прежде чем я использовал mysql_query и я получил в базе данных следующее значение: NU

Вместо этого значения должно быть NULL .

Прочитав этот вопрос, я перешел к подготовленным заявлениям. У меня все еще есть NU в моей базе данных.

Теперь к моему коду. Я читаю строку для строки 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(); 

Что не так?

Редактировать:

По словам Шиплу, я сделал следующее:

Сделайте это без предоставления последних параметров, которые вызывают 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 ; 

Related of "Вставьте значение NULL в поле базы данных с символом char (2) как тип"

Если значение по умолчанию для строки темы не указано или значение null, вы можете просто опустить имя из списка столбцов в инструкции insert.

 mysql> create table t( -> n varchar(20), -> a char(2), -> primary key(`n`) -> ); Query OK, 0 rows affected (0.05 sec) mysql> insert into t (n) values ('myname'); Query OK, 1 row affected (0.00 sec) mysql> mysql> select * from t; +--------+------+ | n | a | +--------+------+ | myname | NULL | +--------+------+ 1 row in set (0.00 sec) 

Другой способ – использовать функцию DEFAULT . Но это только для MySQL . Я не знаю, работает ли это другой движок RDBMS.

 mysql> insert into t (a, n) values (default(a), 'myname1'); Query OK, 1 row affected (0.00 sec) mysql> select * from t; +---------+------+ | n | a | +---------+------+ | myname | NULL | | myname1 | NULL | +---------+------+ 

Я нашел проблему. Я читал файл csv. Этот файл был экспортирован с помощью phpmyadmin и содержал NULL строки. Мой чек

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

было недостаточно, потому что он никогда не проверял строку NULL . Таким образом, решение:

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

Так что Андрей был прав.