MySQL道普請便り

第128回 データベース名,テーブル等で使用できる文字種を確認してみる

この記事を読むのに必要な時間:およそ 6 分

データベースを作成する際に,皆さんはどんな名前を設定しますか。たぶん私もそうですが,基本的には英語で構成することが多いと思います。この連載でも第2回 MySQLにはじめてのデータを入れてみる等でテストデータベースを作成したりしていましたが,その際にもデータベースやテーブル名は英語のものを利用していました。

今回はデータベース名やテーブル,カラム名で使用できる文字種を確認してみようと思います。

検証環境

今回は,第125回 phpMyAdminでDockerで建てたMySQLにアクセスするで記載したdocker-composeを利用して作成します。手元で簡単に試せるように,githubの筆者のレポジトリにサンプルコードとして置いてあるので,気軽に試したい方は,git cloneして試してみてください。試すにはdockerとdocker-composeが必要です。

git cloneしてきたディレクトリに入り,以下のコマンドを実行して見ましょう。

$ docker-compose build
$ docker-compose up -d
$ docker-compose exec mysql /bin/sh
# mysql -uroot -ppassword
mysql>

mysqlクライアントが使用できる環境が,簡単に立ち上がると思います。

公式のドキュメント

今回試した事はMySQL公式のドキュメント(9.2 スキーマオブジェクト名)に記載されています。結果を早く知りたい,詳細な結果が知りたい方は上記のドキュメントを一読してみると良いでしょう。

使用できる文字列の調査

今回試してみるのは以下の文字列になります。

  • 英字
  • 英数字
  • 数字
  • 記号
  • 空白文字
  • 絵文字

これらについて,以下のようにcreate database, create tableを実行して,どの文字列が使えるのかを実際に試してみたいと思います。

英字

とりあえずは基本的な英数字から確認してみようと思います。できるとわかっているところも一応やってみます。

データベースを作成してみましょう。

mysql> create database abcdeghijklmnopqrstuvwx;
Query OK, 1 row affected (0.01 sec)

OKが帰ってきたのでできていそうです。SHOW DATABASE構文で確認をしてみましょう。

mysql> show databases  like 'abc%';
+-------------------------+
| Database (abc%)         |
+-------------------------+
| abcdeghijklmnopqrstuvwx |
+-------------------------+
1 row in set (0.00 sec)

問題なくできていることがわかります。続いてテーブルも確認してみましょう。

mysql> use abcdeghijklmnopqrstuvwx
mysql> create table abcdeghijklmnopqrstuvwx (abcdeghijklmnopqrstuvwx int);
mysql> create table abcdeghijklmnopqrstuvwx (abcdeghijklmnopqrstuvwx int);
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+-----------------------------------+
| Tables_in_abcdeghijklmnopqrstuvwx |
+-----------------------------------+
| abcdeghijklmnopqrstuvwx           |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> show create tables;

ということで,問題なくできていることがわかります。

英数字

英数字が問題なく作成できるかを試してみましょう。英数字の組み合わせで作成ができるかを検証してみます。

英字が先にくるパターンと後に来るパターンで違いが起こらないかも試してみます。まずは英字が先にくるパターンを試してみましょう。

mysql> create database a1;
Query OK, 1 row affected (0.01 sec)

mysql> show databases  like 'a1';
+---------------+
| Database (a1) |
+---------------+
| a1            |
+---------------+
1 row in set (0.00 sec)

データベースは問題なく作成できました。続いてテーブルも試してみましょう。

mysql> create table a1 (a1 int);
Query OK, 0 rows affected (0.01 sec)

mysql> show create table a1;
+-------+----------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                   |
+-------+----------------------------------------------------------------------------------------------------------------+
| a1    | CREATE TABLE `a1` (
  `a1` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
+-------+----------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

こちらは問題なく作成できました。続けて数字が先頭のパターンも試してみます。

mysql> create database 1a;
Query OK, 1 row affected (0.01 sec)

mysql> create table 1a (1a int);
Query OK, 0 rows affected (0.02 sec)

こちらも問題なく作成できました。ということで,数字混じりの文字列も問題なく作成することがわかりました。

著者プロフィール

木村浩一郎(きむらこういちろう)

株式会社オプティム 技術統括本部のエンジニア。最近はミドルウェア・インフラ周りのことも少しずつ学習しています。趣味は将棋。好きな戦法は四間飛車。

Twitter:@kk2170