4

ユーザー用のデータベーススキーマがあります。のように見えます...

CREATE TABLE `users` (

`id` int( 8 ) unsigned AUTO_INCREMENT,
`username` varchar( 255 ),
`password` varchar( 40 ),
`level` tinyint( 1 ) unsigned DEFAULT 1,
`time` datetime DEFAULT NOW(),
`email` varchar( 255 ),

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

idusernamepasswordleveltimeemailの6つのフィールドがありますが、ユーザーが登録している場合は、 usernamepasswordemailの3つだけを挿入します。それらの残りはデフォルト値を持ちます。

問題は、MySQLがエラーをスローすることです:#1067-'time'のデフォルト値が無効です。何かアイデアはありますか?

4

4 に答える 4

6

CURRENT_TIMESTAMPを使用して、列をタイムスタンプに変更します。

それは同じことをしますが、(タイムスタンプで生きることができる限り)機能します-それは制限です。

ディスカッション:

  1. http://bugs.mysql.com/bug.php?id=27645
  2. http://forums.mysql.com/read.php?61,67640,67771#msg-67771

だからあなたの作成は

CREATE TABLE `users` (
`id` int( 8 ) unsigned AUTO_INCREMENT,
`username` varchar( 255 ),
`password` varchar( 40 ),
`level` tinyint( 1 ) unsigned DEFAULT 1,
`time` timestamp DEFAULT CURRENT_TIMESTAMP,
`email` varchar( 255 ),
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
于 2011-03-16T08:28:59.417 に答える
0

使用する必要はありTimeStampませんDateTime

`time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
于 2011-03-16T08:29:52.237 に答える
0

属性が「datetime」の場合、「DEFAULT CURRENT_TIMESTAMP」を作成できないため、次のように属性を「TIMESTAMP」に変更します。

time * datetime* DEFAULT CURRENT_TIMESTAMP,

should be...

time TIMESTAMP DEFAULT CURRENT_TIMESTAMP、

于 2012-12-20T05:20:44.130 に答える
0

通常、MySQL は関数をデフォルト値としてサポートしていません。私の知る限り、例外は 1 つだけです。列に割り当てることができCURRENT_TIMESTAMPますTIMESTAMP。したがって、列のタイプを変更するか (TIMESTAMPほど強力ではないことに注意してくださいDATETIME)、値を埋めるためにトリガーに依存する必要があります。

于 2011-03-16T08:33:09.693 に答える