Open Source WEB

メタデータに関するマニュアルの記述 9.2. Database, Table, Index, Column, and Alias Namesの中に

In addition to the restrictions noted in the table, no identifier can 
contain ASCII 0 or a byte with a value of 255. Database, table, and 
column names should not end with space characters. MySQL 5.0 allows 
the use of identifier quote characters in identifiers, although it is 
best to avoid doing so if possible.

というくだりがある。カラム名に限ったことではなくメタデータ全般のことだが、 後にはスペース(0x20)を付けてはいけないとある。

後に漢字のスペースとASCIIスペースをつけた場合を試してみよう。

mysql> CREATE TABLE `spacetest` ( `空白 ` int, `back ` int );
ERROR 1166 (42000): Incorrect column name 'back '
mysql>

'back ' がダメと言われたので、今度はスペースを前につけてみよう。

mysql> CREATE TABLE `spacetest` ( `空白 ` int, ` back` int );
Query OK, 0 rows affected (0.15 sec)
 
mysql> DESCRIBE `spacetest`;
+-----------+---------+------+-----+---------+-------+
| Field     | Type    | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| 空白  | int(11) | YES  |     | NULL    |       |
|  back     | int(11) | YES  |     | NULL    |       |
+-----------+---------+------+-----+---------+-------+
2 rows in set (0.05 sec)
 
mysql>

縦線がずれてしまっているが、今は 5.0.15のバイナリを使っていて、 mysqlクライアントを起動後に SET NAMES でキャラクタセットを UTF-8に変更したので、こんなことになってしまった。

でも、カラムの先頭にスペースが1つ入っているのがはっきり分かるだろう。 空白の後には漢字スペース「 」が入っているのだが、 表示からだけではよく分からないであろう。

データを入れて、確認してみよう。

mysql> INSERT INTO `spacetest` VALUES(100,200);
mysql> INSERT INTO `spacetest` VALUES(100,200);
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO `spacetest`(` back`,`空白`) VALUES (234,567);
ERROR 1054 (42S22): Unknown column '空白' in 'field list'
mysql>

エラーになってしまったが、これは カラムの並び順を指定するときに、 `空白 `でなくてはならないところを`空白`にしてしまったためである。

mysql> INSERT INTO `spacetest`(` back`,`空白 `) VALUES (234,567);
Query OK, 1 row affected (0.00 sec)
 
mysql> SELECT ` back`, `空白 ` FROM `spacetest`;
+-------+-----------+
|  back | 空白  |
+-------+-----------+
|   200 |       100 |
|   234 |       567 |
+-------+-----------+
2 rows in set (0.00 sec)
 
mysql>

すべてちゃんと動くようである。

でも、MySQLでは前にはスペースが入れられるからといって、 実際に入れてしまうのは無茶である。混乱の元になる。

メタデータの前後には、空白を入れるべきではない。


ところで、 9.2. Database, Table, Index, Column, and Alias Names の最後の方に、 ちょっと危ないかなと思わせることが書かれている。


戻る:カラム名にはバイト数制限があるだけ

次へ:シフトJIS系のメタデータは要注意


フィードバック:

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us