34

MySQLタイムスタンプ列にNULLを挿入/更新すると、予期しない動作が発生します。

次のステートメントを検討してください。

create table temp(id int, hireDate timestamp default 0);
insert into temp (id) values(1);
insert into temp (id, hireDate) values(2, null);
select * from temp;
id  hireDate
-----------------------------
1   
2   2012-09-19 10:54:10.0

最初の挿入(hiredateSQLで指定されていない場合、hireDateがnull(0)予期されます。

ただし、SQLで明示的なnullが渡されると、予期しない現在の日時が挿入されます。なぜこれが起こるのですか?

注:Hibernateは2番目のタイプのインサートを使用するため、問題になります。タイムスタンプ列にnullを挿入するにはどうすればよいですか?

4

6 に答える 6

33

http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html

さらに、NULL値を許可するようにNULL属性で定義されていない限り、任意のTIMESTAMP列にNULL値を割り当てることにより、現在の日時に初期化または更新できます。

TIMESTAMPをNULL可能にするには、NULL属性を使用してタイムスタンプを作成するか、テーブルを変更してNULL属性を追加します。createステートメントでは、次のようになります。

CREATE TABLE t1 (tsvalue TIMESTAMP NULL, ... );

NULL属性が設定されたTIMESTAMPフィールドにNULL値を挿入すると、フィールドはNOW()ではなくNULLに設定されます。

于 2012-09-19T05:46:09.130 に答える
11

MySQL タイムスタンプに NULL を挿入および更新できます。

テーブルを作成します。

create table penguins(id int primary key auto_increment, the_time timestamp NULL);

いくつかの行を挿入します:

insert into penguins(the_time) values (now());
insert into penguins(the_time) values (null);
insert into penguins(the_time) values (0);
insert into penguins(the_time) values ('1999-10-10 01:02:03');

どちらが印刷されますか:

select * from penguins

1   2015-01-23 15:40:36
2   
3   0000-00-00 00:00:00
4   1999-10-10 01:02:03

the_time2 行目のdatatype:で呼び出されたtimestamp列の値は NULL です。

于 2015-01-23T20:37:53.440 に答える
4

HireDate 列のデフォルト値を変更する必要があります。デフォルト値は null にする必要があります

これ

create table temp(id int, hireDate timestamp default 0);

これでなければなりません:

create table temp(id int, hireDate timestamp null);
于 2012-09-19T06:06:16.153 に答える
0

hireDateテーブルの列にNULLを挿入する場合は、NULLを指定する必要があります

INSERT INTO temp (id, hireDate) VALUES(3, null);

isのためDatatype 、列を作成するときにnullとして定義する必要がありますhireDatetimestamp

于 2012-09-19T05:44:19.050 に答える