MySQLの予約語?
SQLでは基本的に予約語をテーブル名やカラム名に使うことはできない。MySQL 5.6 9.3 予約語
https://dev.mysql.com/doc/refman/5.6/ja/reserved-words.html
"IN"や"FROM"をカラム名に使うことはないと思うけど、"RANGE"とか"REPEAT"とか"SEPARATOR"なんかは使ってしまいそうな気がする。
例えば、カラム名に"repeat"を使ってテーブルを作成しようとすると以下のようになる。
> create table Repeats(id char(10), repeat tinyint); 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 'repeat tinyint)' at line 1
エスケープするには
こう言う場合は`(バッククォート)で囲むことによって、カラム名として扱うことができる。> create table Repeats(id char(10), `repeat` tinyint); Query OK, 0 rows affected (0.04 sec)
ただし、テーブル作成時のみでなく、このカラムを参照する時も`で囲む必要がある。
> select repeat from Repeats; 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 'from Repeats' at line 1 > select `repeat` from Repeats; Empty set (0.01 sec)
MySQL8ではキーワードが増えている
今回試したのはMySQL5.7だったけど、MySQL8ではキーワードが増えている。MySQL 8.0 9.3 Keywords and Reserved Words
https://dev.mysql.com/doc/refman/8.0/en/keywords.html
こんなにたくさん使えない単語がある!と思うかもしれないけど、厳密にはキーワードと予約語は違い、キーワードの中でも予約されているものと予約されていないものがあるみたい。
この中で予約されている(キーワードの右に(R)がついている)ものだけがエスケープしないとMySQLで文法エラーになってしまう。
0 件のコメント:
コメントを投稿