MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLエラー1064(42000)の原因と解決法:ZEROFILLカラムでのSQL構文エラーを修正する

エラーの発生状況

MySQLでZEROFILL属性を誤った順序で指定してテーブルを作成しようとすると、次のような「ERROR 1064 (42000)」という構文エラーが発生します。

mysql> create table DemoTable
    -> (
    -> StudentCode int(10) NOT NULL ZEROFILL AUTO_INCREMENT PRIMARY KEY
    -> );
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ZEROFILL AUTO_INCREMENT PRIMARY KEY
)' at line 3

エラーの原因

MySQLでは、カラム定義に含める各属性(オプション)には決まった記述順序があります。ZEROFILLは表示幅の指定(int(10)など)の直後に置く必要があり、NOT NULLより先に記述しなければなりません。上記の例では「NOT NULL ZEROFILL」という誤った順序になっているため、構文エラーとなっています。

正しい構文

正しく実装するには、以下の順序で属性を指定します。

yourColumnName int(10) ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY

実際にテーブルを作成してみる

まず、正しい構文を使ってテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> StudentCode int(10) ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY
    -> );
Query OK, 0 rows affected (0.55 sec)

レコードの挿入

続いて、INSERTコマンドで複数件のレコードを挿入します。

mysql> insert into DemoTable values();
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.28 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values();
Query OK, 1 row affected (0.10 sec)

レコードの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下のとおりです。

+-------------+
| StudentCode |
+-------------+
| 0000000001  |
| 0000000002  |
| 0000000003  |
| 0000000004  |
| 0000000005  |
+-------------+
5 rows in set (0.00 sec)

このように、ZEROFILLを正しい順序で指定すれば、AUTO_INCREMENTで自動採番された値が10桁に満たない場合に左側を0で埋めた形式で表示されます。学籍番号や会員番号など、桁数を揃えたいIDを扱う際に非常に便利な機能です。

  1. MySQLの「Data too long for column」エラーとは?原因と解決方法をわかりやすく解説

    MySQLの「Data too long for column」エラーとは 「Data too long for column」は、カラムに定義されたデータ型が格納できるサイズを超えるデータを挿入しようとした際に発生するMySQLのエラー(ERROR 1406)です。つまり、そのカラムには指定されたデータを保存するだけの容量がない、ということを意味します。 具体例: データ型が varchar(6) の場合、格納できるのは最大6文字までです。そのため、7文字以上のデータを挿入しようとすると、このエラーが発生します。 エラーの発生を確認してみよう 実際にテーブルを作成して、エラーの挙動を確認して

  2. SQL ServerにMySQLのENUM型に相当する機能はある?代替方法を解説

    結論から言うと、SQL ServerにはMySQLのENUMデータ型と完全に同じ組み込みデータ型は存在しません。しかし、VARCHAR型とCHECK制約を組み合わせることで、ENUMとほぼ同等の機能を実現できます。MySQLにおけるENUM型の基本まず、MySQL(バージョン8.0.12で動作確認済み)でのENUM型の定義方法を見てみましょう。構文は以下の通りです。create table yourTableName ( yourColumnName enum(Value1,Value2,Value3,......N) default Value1 or Value2 or Value3,..