2015-05-21 1 views
1

У меня есть столбец дня рождения как дата, определенная в моей таблице. Когда я вставляю человека и оставляю пустое поле рождения, я получаю 0000-00-00, и я хочу получить значения NULL. когда я вставляю дату в день рождения, я получаю дату, и это нормально.MySQL вставляет NULL вместо 0000-00-00 date

я пытался:

Create table (
birthday DATE NULL, 
birthday DATE DEFAULT NULL, 
birthday DATE NULL DEFAULT NULL, 
); 

не работает, пожалуйста, маленький совет, чтобы получить NULL вместо 0000-00-00 в моих полях рождения. мой PHP скрипт:

$q = "INSERT INTO users (birthday, other_column, data_registration) VALUES ('$birthday', '$other_column', NOW()) 

я не получаю никакого решения еще, любой ideea пожалуйста?

+3

Вы определяете 3 столбец с таким же именем в на e стол? – Jens

+0

Если вы хотите, чтобы значение было 'NULL', тогда передайте' NULL' в ваш SQL-запрос (и не цитируется в строке) –

+0

Я должен использовать цитату в строке –

ответ

0

если вы используете birthday DATE DEFAULT NULL, в вашем создать statemnt и использовать

INSERT INTO users (other_column) VALUES ('$other_column') 

Вы должны получить null´in колонку birthday`.

+0

я получаю 0000-00-00, и я хочу значение NULL, я определил NULL DEFAULT NULL в утверждение дня рождения, когда я создаю таблицу –

+0

@criss, он не может видеть [demo] (http://sqlfiddle.com/#!9/2dfe5/1) – Jens

0

Если вы хотите EXPLICITLY вставить нуль в таблицу, вам нужно будет вставить NULL из PHP.

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

например.

CREATE TABLE Person 
(
    Name VARCHAR(20), 
    BirthDate DATE DEFAULT NULL -- Redundant, since a NULLABLE column will default NULL 
); 

INSERT INTO Person(Name) VALUES('Joe'); -- Default, NULL 
INSERT INTO Person(Name, BirthDate) VALUES('Joe', NULL); -- Explicit Null 
INSERT INTO Person(Name, BirthDate) VALUES('Joe', DEFAULT); -- Default, NULL 

SqlFiddle example here

Если дата в PHP вы вставляете это 0000-00-00, то вам нужно будет применить логику в коде либо заменить NULL, DEFAULT для столбца, или опустить колонку (или я предположим, использовать триггер, но это взломать)

+0

Что происходит, когда я должен вставить значение дня рождения? оно работает? –

3

Что находится в вашем $birthday?

Предположим, у вас есть $birthday = null или $birthday = "null", вы получите 0000-00-00. Это происходит потому, что, когда он проходит на ваш запрос, он становится чем-то вроде (я считаю, что это лечение вашего 'null' или null в виде строки, потому что у вас есть в одиночных кавычках):

INSERT INTO users (birthday, other_column, data_registration) VALUES ('null', '$other_column', NOW()) 

Вместо попробовать это, что 2 одиночные кавычки $birthday удаляются:

$q = "INSERT INTO users (birthday, other_column, data_registration) VALUES ($birthday, '$other_column', NOW()) 

Вот альтернативный фикс:

if ($birthday) { 
$q = "INSERT INTO b (birthday, other_column, data_registration) VALUES ('$birthday', '$other_column', NOW())"; 
} else { 
$q = "INSERT INTO b (birthday, other_column, data_registration) VALUES (DEFAULT, '$other_column', NOW())"; 
} 
+0

$ dayn = $ _ POST ['dayn']; $ monthn = $ _ POST ['monthn']; $ yearn = $ _ POST ['yearn']; $ birthday = $ yearn .'- '. $ Monthn .'-'. $ Dayn; –

+0

Проверьте альтернативное решение, которое я только что отредактировал, посмотрим, поможет ли это. – jsuen

Смежные вопросы