MySQL, как вводить нулевые даты

У меня возникли проблемы с введением нулевых значений в поля даты в таблицу MySQL.

Вот запрос вставки:

$query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES ("'.$string1.'", "'.$string2.'", '.$date1.', '.$date2.')';

Столбцы s1 и s2 принимают строковые значения, а d1 и d2 принимают даты. Когда я запускаю этот запрос только с полями строки, проблем нет.

Значения даты могут быть либо заданными, либо нулевыми, поэтому я не включил кавычки в запрос, а вместо этого добавил их к переменной ранее. Это код php, который я использую для установки значений даты:

if (empty($date1)){
    $date1 = NULL;
}
else{
    $date1part = explode("/",$date1);
    $date1 = '"'.$date1part[2].'/'.$date1part[1].'/'.$date1part[0].'"';
}

Когда все значения даты установлены, запись вставлена ​​правильно. Однако, когда любая из дат равна нулю, ничего не вставлено.

Почему я не могу просто вставить нулевые значения в MySQL?

Ответ 1

Попробуйте следующее:

$query = "INSERT INTO table (column_s1, column_s2, column_d1, column_d2) 
          VALUES ('$string1', '$string2', " . ($date1==NULL ? "NULL" : "'$date1'") . ", " . ($date2==NULL ? "NULL" : "'$date2'") . ");";

так, например, если вы поместите это в запрос:

$string1 = "s1";
$string2 = "s2";
$date1 = NULL;
$date2 = NULL;

результат должен быть:

INSERT INTO table (column_s1, column_s2, column_d1, column_d2) VALUES ('s1', 's2', NULL, NULL);

Ответ 2

Вы должны сначала преобразовать нулевую переменную в строку NULL Вот так:

if(is_null($date1)){
    $date1 = 'NULL';
}

Если вы используете столбец даты MySQL, вы также должны указать, что он должен содержать null при его создании, например:

CREATE TABLE `table` (
id INT NOT NULL AUTO_INCREMENT,
date DATE NULL DEFAULT NULL,
PRIMARY KEY(id)
)

Также очень важно выполнить запрос с привязанными параметрами, например, используя pdo

Что-то вроде этого:

$query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES (?, ?, ?, ?)';
$stmt = $db->prepare($query);
$stmt->execute(array($string1,$string2,$date1,$date2));

Ответ 3

Обратная косая черта N - это еще один способ выражения NULL в MySQL.

Попробуйте поместить значение (обратная косая черта N): \N в один из следующих параметров:

$data1 = "\N";
$sql="insert into tablename set column_s1='" . $data1 . 
  "', column_s2='" . data2 . 
  "', column_s3='" . $data3 . "'";

Ссылка: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

Ответ 4

В Derby, если вы хотите вставить значения, кроме тех, которые вы объявили Null (column_d1, column_d2), sql:

INSERT INTO DB.table (column_s1, column_s2) VALUES ('s1', 's2');

Ответ 5

Вероятно, ответ в данный момент не нужен, но я нашел решение, которое я искал. Используйте Expression для передачи NULL следующим образом:

['some_date_to_update' => new Expression('NULL')]

Следовательно, MySQL поймет, чего вы хотите, и сохраните (NULL) в БД вместо хранения 0-дат. Надеюсь, это поможет кому-то.

Ответ 6

если NULL нет работы, просто укажите дату "0000-00-00"

$chequeDate = "0000-00-00";

Ответ 7

В Mysql DATE тип данных Default NULL означает

Некоторая версия установлена как 0000-00-00

Некоторая версия установлена как 1970-01-01