2016-12-08 3 views
1

私は、日時とデフォルト値のcurrent_timestampであるフィールドtsを持つテーブルを持っています。一時的なテーブルを作成して日付から選択すると、デフォルトの値が無効になるエラー

私は

CREATE TEMPORARY TABLE tblTmp (
    tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    INDEX(tmpid) 
) AS 
    SELECT * FROM myTable; 

を経由してこの表から、一時テーブルを作成しようとすると、私はので、列TSの無効なデフォルト値のエラーを取得します。

これは、mysql 5.7のstrictモードに関連していることがわかりました。

私はこのエラーがなぜcurr_timestampでデフォルト値として発生するのか理解できないため、これを処理する方法はありますか?

UPDATE:selectでNOW()またはCURRENT_TIMESTAMPを使用していることがわかりました。私はラインを削除し、それは動作します。

ので:

SELECT col1, col2, ... FROM myTable 

SELECT col1, col2, NOW() as currDatetime FROM myTable 

が動作していない取り組んでいます。

これはどうして起こりますか?

+0

なぜ、 'create * from myTable'として' create temporary table tblTmp?その後、インデックスを作成します。 –

+0

@Gordonは私の問題を解決するものではありません。エラーメッセージは、tmpId以外のdatetimeカラムに関連しています – solick

+1

select *ではなく、無効な値の名前とコードでフィールドを選択できますか? –

答えて

0

フィールドを選択した場合、選択項目で問題またはコードを回避することができます。例えば は、あなたがあなたの元テーブルから列に新しい名前を割り当てるために、あなたの選択で別名を使用することができます

MariaDB [sandbox]> 
MariaDB [sandbox]> select * from tbltmp; 
+-------+-----+---------------------+ 
| tmpid | id | ts     | 
+-------+-----+---------------------+ 
|  1 | 1 | 2016-12-08 13:14:24 | 
|  2 | 2 | 2016-12-08 13:14:24 | 
|  3 | 3 | 2016-12-08 13:14:24 | 
|  4 | 6 | 2016-12-08 13:14:24 | 
|  5 | 7 | 2016-12-08 13:14:24 | 
|  6 | 8 | 2016-12-08 13:14:24 | 
|  7 | 10 | 2016-12-08 13:14:24 | 
|  8 | 12 | 2016-12-08 13:14:24 | 
|  9 | 14 | 2016-12-08 13:14:24 | 
| 10 | 15 | 2016-12-08 13:14:24 | 
| 11 | 16 | 2016-12-08 13:14:24 | 
| 12 | 17 | 2016-12-08 13:14:24 | 
| 13 | 18 | 2016-12-08 13:14:24 | 
| 14 | 19 | 2016-12-08 13:14:24 | 
| 15 | 999 | 2016-12-08 13:16:41 | 
+-------+-----+---------------------+ 
15 rows in set (0.00 sec) 

MariaDB [sandbox]> select * from users; 
+-----+----------+--------------+--------+---------------------+ 
| id | userName | photo  | status | ts     | 
+-----+----------+--------------+--------+---------------------+ 
| 1 | John  | john.png  |  1 | 2016-12-08 13:14:24 | 
| 2 | Jane  | jane.png  |  1 | 2016-12-08 13:14:24 | 
| 3 | Ali  |    |  1 | 2016-12-08 13:14:24 | 
| 6 | Bruce | bruce.png |  1 | 2016-12-08 13:14:24 | 
| 7 | Martha |    |  1 | 2016-12-08 13:14:24 | 
| 8 | Sidney |    |  1 | 2016-12-08 13:14:24 | 
| 10 | Charlie | charlie.png |  1 | 2016-12-08 13:14:24 | 
| 12 | Elisa |    |  1 | 2016-12-08 13:14:24 | 
| 14 | Samantha | samantha.png |  1 | 2016-12-08 13:14:24 | 
| 15 | Hannah | hannah.png |  1 | 2016-12-08 13:14:24 | 
| 16 | Hannah |    |  1 | 2016-12-08 13:14:24 | 
| 17 | Kevin | kevin1.png |  1 | 2016-12-08 13:14:24 | 
| 18 | Kevin | kevin2.png |  1 | 2016-12-08 13:14:24 | 
| 19 | Ruth  |    |  1 | 2016-12-08 13:14:24 | 
| 999 | xxx  | photo  |  1 | 2016-12-08 13:16:41 | 
+-----+----------+--------------+--------+---------------------+ 
15 rows in set (0.00 sec) 

MariaDB [sandbox]> drop table if exists tbltmp; 
Query OK, 0 rows affected, 1 warning (0.00 sec) 

MariaDB [sandbox]> 
MariaDB [sandbox]> CREATE TEMPORARY TABLE tblTmp (
    ->  tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    ->  INDEX(tmpid) 
    ->) AS 
    ->  SELECT id,ts FROM users; 
Query OK, 15 rows affected (0.19 sec) 
Records: 15 Duplicates: 0 Warnings: 0 

結果を含む

CREATE TABLE `users` (
    `id` int(11) NOT NULL, 
    `userName` varchar(60) NOT NULL, 
    `photo` varchar(50) NOT NULL, 
    `status` int(11) NOT NULL, 
    `ts` datetime DEFAULT CURRENT_TIMESTAMP 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

を与えられました。

+0

ありがとうが、私はそれを正確にこのようにします。違いのみ:Engine = MyISAM、chariest UTF8。これが問題なのでしょうか? – solick

+0

申し訳ありません私は2つのものを混ぜました。問題の列は次のように生成されます。 NOW()AS currDatetime、 – solick

関連する問題