Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
メタデータに関するマニュアルの記述 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 の最後の方に、 ちょっと危ないかなと思わせることが書かれている。
フィードバック:
There is no comment.