数字単体
さて,
mysql> create database 1; 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 '1' at line 1
残念なことに構文エラーになってしまいました。しかし,
mysql> create database `1`; Query OK, 1 row affected (0.01 sec) mysql> show databases like '1'; +--------------+ | Database (1) | +--------------+ | 1 | +--------------+
続けてテーブルも作成してみましょう。databaseを変更する時は引用符は不要なようです。
mysql> use 1 Database changed
まずは引用符を付けずに実行してみます。
mysql> create table 1 (1 int); 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 '1 (1 int)' at line 1
エラーが発生しました。テーブル名とカラム名のそれぞれを引用符で囲って試してみます。
mysql> create table `1` (1 int); 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 '1 int)' at line 1 mysql> create table 1 (`1` int); 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 '1 (`1` int)' at line 1
どちらもエラーとなりました。最後にテーブル名とカラム名を引用符で囲ってみます。
mysql> create table `1` (`1` int); Query OK, 0 rows affected (0.02 sec) mysql> show create table `1`; +-------+--------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------------------------------------------------------------------+ | 1 | CREATE TABLE `1` ( `1` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | +-------+--------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
ということで作成できました。このように通常使えない文字列であっても,
記号文字列
ASCII文字列で定義できる文字列のうち,
mysql> show create table +; 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 '+' at line 1
引用符を付けないと怒られてしまいますが,
mysql> create database `+`; Query OK, 1 row affected (0.01 sec) mysql> use + Database changed
以上のように作成できるようになったことがわかります。これまでのことから察しの良い方はわかるかと思いますが,
mysql> create table `+` (`+` int); Query OK, 0 rows affected (0.03 sec) mysql> show create table `+`; +-------+--------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+--------------------------------------------------------------------------------------------------------------+ | + | CREATE TABLE `+` ( `+` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci | +-------+--------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
$と_
ASCII文字列のうち,
mysql> create database $; Query OK, 1 row affected (0.00 sec) mysql> show databases like '$'; +--------------+ | Database ($) | +--------------+ | $ | +--------------+ mysql> create database _; Query OK, 1 row affected (0.01 sec) mysql> show databases like '\_'; +---------------+ | Database (\_) | +---------------+ | _ | +---------------+ 1 row in set (0.00 sec)
それぞれ引用符なしで作成できることがわかりました。show databaseをしているところで
空白文字
空白文字は引用符なしで使用できないことは,
「a b」
mysql> create database a b; 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 'b' at line 1
エラーが発生しました。やはり無理なようです。続けて,
- 空白文字単体のパターン
- 先頭に空白文字が入るパターン
- 途中に空白文字が入るパターン
- 末尾に空白文字が入るパターン
上記を順に試していきます。
まずは空白文字単体のパターンです。
mysql> create database ` `; ERROR 1102 (42000): Incorrect database name ' '
不正なデータベース名と怒られてしまいました。
続いて先頭に空白文字が入るパターンです。
mysql> create database ` a`; Query OK, 1 row affected (0.00 sec) mysql> show databases like ' a'; +---------------+ | Database ( a) | +---------------+ | a | +---------------+ 1 row in set (0.00 sec) mysql> show databases like 'a'; Empty set (0.00 sec)
問題なく作成されていることがわかりました。ただし,
mysql> use a ERROR 1049 (42000): Unknown database 'a' mysql> use ` a` Database changed
続いて,
mysql> create database `a a`; Query OK, 1 row affected (0.01 sec) mysql> show databases like 'a a'; +----------------+ | Database (a a) | +----------------+ | a a | +----------------+ 1 row in set (0.00 sec)
こちらも作成できました。ただしuseをするときには引用符を使わないとできません。
mysql> use a a ERROR 1049 (42000): Unknown database 'a' mysql> use `a a` Database changed
最後に,
mysql> create database `a `; ERROR 1102 (42000): Incorrect database name 'a '
不正な文字列として扱われてしまいました。
ということで,
日本語
さて,
mysql> create database 日本語テスト; Query OK, 1 row affected (0.00 sec) mysql> show databases like '日本語テスト'; +-------------------------------+ | Database (日本語テスト) | +-------------------------------+ | 日本語テスト | +-------------------------------+ 1 row in set (0.00 sec)
というわけで,
絵文字
最後に絵文字を試してみましょう。
mysql> create database ☺; Query OK, 1 row affected (0.00 sec) mysql> show databases like '☺'; +----------------+ | Database (☺) | +----------------+ | ☺ | +----------------+ 1 row in set (0.00 sec)
このように使用できることがわかりました。
ただし使える文字種がU+0080~U+FFFFと限られているため,
絵文字のデータベースやテーブルなどが使えるとおもしろいですね。
まとめ
今回の結果から,