2010-12-30 5 views
3

私はこれを途中で学んだけど、私がそれを読んだり聞いたのは分かりません。オンラインで見つかったものはありませんが、覚えています。 mysql4.xからmysql5.xへのアップグレード時に、必要な変更の1つは、挿入用の自動増分フィールドが含まれていれば、 ''からNULLに変更しなければならないということでした。Mysql 4とMysql 5の自動インクリメントフィールドが挿入されている

私はそのいずれにせよ、インサートに持つことが必要ですが、ちょうど注目点のために...

のMySQL 4.xのができるようになりません知っている:「 テーブルにINSERT(table_idは、名前、場所)VALUESを( '、' john '、' NY ');

が、MySQL 5.xが持っていた:TABLE INTO INSERT(table_idは、名前、場所)VALUES(NULL 、 'ジョン'、 'NY');

これをサポートするmysqlのサイトに関する情報は見つかりませんでしたが、実際にはmysql 5.xでエラーが発生し、4.xで動作することがわかりましたが、これはどこに記載されていますか?

+0

を避けるために使用0を提案します。私は ''が有効であることを知らなかった。 –

+0

空文字列の代わりに 'null'を使うのはどうですか? –

答えて

1

​​と5.0ドキュメントは0またはNULLが必要であると状態の両方:

自動的 割り当てられたシーケンス番号MySQLがので、値が、 AUTO_INCREMENTカラムに指定されませんでした。また、 を明示的に指定すると、NULLに0を割り当てて に列番号を生成することもできます。

+0

右ですが、私は4.xは厳しいポリシーでは怠惰だと言っていますし、 "私は禅車やウェブサイトベーカーのような古いコードをautoincフィールドには常に使用しています。その後、5.xが出たときに、戻ってすべてのコードを更新して、 ''の代わりにNULLを使用する必要がありました。しかし、私はこれが文書化された場所を見つけようとしています。 – Dss

+0

ok私はあなたが上記のリンクを参照してください、私は0またはnullのものを参照してください..多分それはMySQLの4.0でした。 – Dss

1

これは、MySQLの内部でまだ

mysql> CREATE TABLE some_test (id int(10) unsigned NOT NULL auto_increment, primary key(id)); 
Query OK, 0 rows affected (0.00 sec) 

mysql> insert into some_test values (''); 
Query OK, 1 row affected, 1 warning (0.00 sec) 

mysql> show warnings; 
+---------+------+------------------------------------------------------+ 
| Level | Code | Message            | 
+---------+------+------------------------------------------------------+ 
| Warning | 1264 | Out of range value adjusted for column 'id' at row 1 | 
+---------+------+------------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> select * from some_test; 
+----+ 
| id | 
+----+ 
| 1 | 
+----+ 
1 row in set (0.00 sec)

を整数に変換し、重要ではありません。しかし、私は0またはNULLを常に使用しているこの警告

関連する問題