MySQLエラー1064(42000)の原因と解決策:バッククォートとシングルクォートの正しい使い分け
MySQLエラー1064(42000)とは?
MySQLでは、2種類の引用符を使い分ける必要があります。ひとつはバッククォート(` `)、もうひとつはシングルクォート(' ')またはダブルクォートです。ERROR 1064 (42000) の多くは、カラム名に対してシングルクォートを使用してしまうことが原因で発生します。
正しいルールは以下の通りです。
- カラム名 → バッククォート(` `)で囲む
- 文字列値 → シングルクォート(' ')で囲む
検証用テーブルの作成
まず、エラーの挙動を理解するためにテーブルを作成します。テーブル作成用のクエリは以下の通りです。
mysql> create table Backtick_SymbolDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> FileName varchar(30),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.81 sec)エラーが発生するケース:カラム名へのシングルクォートの誤用
次に、カラム名をシングルクォートで囲んだ場合のINSERT文を見てみましょう。下記の例では、「Name」はバッククォートで囲んでいますが、「FileName」をシングルクォートで囲んでいるため、エラーが発生しています。
mysql> insert into Backtick_SymbolDemo(`Name`,'FileName') values('John','Sum.cpp');
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 ''FileName') values('John','Sum.cpp')' at line 1エラーを回避する2つの方法
このエラーを回避するには、次のいずれかの方法を使用します。
- すべてのカラム名をバッククォートで囲む
- カラム名にはバッククォートもシングルクォートも使用しない
方法1:すべてのカラム名をバッククォートで囲む
両方のカラム名をバッククォートで囲んだINSERT文がこちらです。正常に実行できています。
mysql> insert into Backtick_SymbolDemo(`Name`,`FileName`) values('John','Sum.cpp');
Query OK, 1 row affected (0.12 sec)方法2:カラム名に引用符を使用しない
バッククォートを一切使わずにレコードを挿入することも可能です。予約語などと重複しない限り、この書き方でも問題ありません。
mysql> insert into Backtick_SymbolDemo(Name,FileName) values('Larry','SocketProgram.java');
Query OK, 1 row affected (0.23 sec)
mysql> insert into Backtick_SymbolDemo(Name,FileName) values('Mike','UserCreationScript.sql');
Query OK, 1 row affected (0.10 sec)結果の確認
SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from Backtick_SymbolDemo;
実行結果は以下の通りです。3件のレコードが正常に登録されていることが確認できます。
+----+-------+------------------------+ | Id | Name | FileName | +----+-------+------------------------+ | 1 | John | Sum.cpp | | 2 | Larry | SocketProgram.java | | 3 | Mike | UserCreationScript.sql | +----+-------+------------------------+ 3 rows in set (0.00 sec)
まとめ
MySQLにおけるERROR 1064 (42000) は、カラム名にシングルクォートを使用することが主な原因です。カラム名には必ずバッククォートを使用し、文字列値にはシングルクォートを使用するというルールを守れば、このエラーは確実に回避できます。
-
MySQLエラー#1064の解決法|SQL構文エラー「TYPE=MyISAM付近」の原因と対処
MySQLエラー#1064とは?テーブル作成時にストレージエンジン名を指定する際、古い構文である「TYPE」を使用すると、MySQLエラー#1064(SQL構文エラー)が発生します。この「TYPE」構文はMySQL 5.5で非推奨となり、その後のバージョンで削除されたためです。実際に発生するエラーは以下の通りです。mysql> create table DemoTable1836 ( ClientId int NOT NULL AUTO_INCREMENT PRIMAR
-
MySQLサーバーへの接続に使えるコマンドオプション徹底解説
MySQLサーバーへの接続オプションとはMySQLクライアントプログラムには、サーバーへの接続方法を制御するためのさまざまなコマンドラインオプションが用意されています。これらのオプションを使うことで、接続先のホストやポート番号、認証方式のほか、接続を暗号化するかどうか、圧縮するかどうかといった設定まで細かく指定できます。これらのオプションは、コマンドラインから直接指定できるだけでなく、オプションファイル(my.cnf / my.ini)に記述しておくことも可能です。主な接続関連オプション--default-auth: 使用する認証プラグインを指定します。--host: MySQLサーバーが稼働