4

ワークベンチで SQL スクリプトを phpMyAdmin にエクスポートしましたが、TIMESTAMP のデフォルト値が原因でエラーが発生します。

コードの一部を次に示します。

CREATE TABLE IF NOT EXISTS `test`.`is_users` (
  `count` INT(10) UNIQUE NOT NULL AUTO_INCREMENT,
  `active` ENUM('1', '0') NULL DEFAULT 1,
  `id` VARCHAR(36) UNIQUE NOT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:01',
  `updated_at` TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:01',
  `deleted_at` TIMESTAMP NULL DEFAULT NULL,

そして、私はエラーが発生します:

#1067 - 「created_at」の無効なデフォルト値

エラーを回避するために、デフォルトの日付は、たとえば 1970-01-01 01:01:01 にする必要があります。これは、ゼロが存在できないことを意味します。どうすれば修正できますか?ありがとう。

4

4 に答える 4

1

試す

SELECT FROM_UNIXTIME(1);

システムが UTC 以外のタイムゾーンで実行されている場合、結果として「1970-01-01 00:00:01」は得られません。たとえば、システムが CET で実行されていると、'1970-01-01 01:00:01' になります。したがって、この結果はテーブルのデフォルト値として機能するはずです。

于 2015-03-01T20:11:19.800 に答える
0

実際には、コードのこの部分を削除するだけで十分です。

 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';`
于 2015-03-02T10:15:37.790 に答える
0

5.7 では、必要に応じて日時とタイムスタンプ、または時間の 0をサポートできるようにするために、 TRADITIONALinを無効にする必要があります。たとえば、5.7.10 のデフォルトでは、SQL モードは次のとおりです。sql_mode'0000-00-00 00:00:00'

mysql> SELECT @@sql_mode;
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                                               |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

sql_modeこれを行うには、my.cfファイルに設定するか、次のようにコマンドを使用します。

SET sql_mode='ALLOW_INVALID_DATES';

他のモードをオンにしておくことをお勧めします。上記のリンク先のドキュメントを参照してください。一部のモードは他のモードに依存しているため、これは非常に注意が必要です。

于 2015-12-22T06:18:02.810 に答える
0

00:00:01 は一時的に有効です。

5.6.5 で TIMESTAMP DEFAULT 処理が変更されました。どのバージョンを使用していますか? http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.htmlを参照してください。

5.6.12 ではエラーになりません。

解決策: 5.6 にアップグレードします。

于 2015-03-01T19:16:26.797 に答える