Open Source WEB

カラム名に漢字を使った例は既に試してみたし、動いたようだ。

念のために、カラム名に漢字を使っても良いのか、 マニュアルによる確認をしておこう。

9.2. Database, Table, Index, Column, and Alias Names にメタデ−タの説明があり、 カラム名についての説明もある。

Identifier Maximum Length (bytes)       Allowed Characters
Database      64     Any character that is allowed in a directory name,
                            except ‘/’, ‘\’, or ‘.’
Table         64     Any character that is allowed in a filename,
                            except ‘/’, ‘\’, or ‘.’
Column        64     All characters
Index         64     All characters
Alias        255     All characters

デ−タベ−ス名やテ−ブル名は、ファイルシステムに依存する。 それは、デ−タベ−スがディレクトリに対応し、 テ−ブルがファイルに対応するからであった。

しかし、カラム名にはそのような制限はない。最大長が64バイトとあるが、 それ以外には制約はないらしい。

mysql> SET NAMES utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE `longcolumnname` ( `漢字を含む長いカラム名は大丈夫だろうか心配である` int );
ERROR 1059 (42000): Identifier name '漢字を含む長いカラム名は大丈夫だろうか心配である' is too long
mysql>

カラム名の最大長は64バイトとなっていて、これに引っかかったのかも知れない。 文字列の長さをバイトで返す関数 LENGTH(str)があったので、 それで確かめてみよう。

mysql> SELECT LENGTH(`漢字を含む長いカラム名は大丈夫だろうか心配である`);
ERROR 1054 (42S22): Unknown column '漢字を含む長いカラム名は大丈夫だろうか心配?' in 'field list'
mysql>

エラーメッセージに、'field list' なんてのが含まれていて、 どうもフィールド(カラム)の名称と誤解されたようだ。 これは、バッククォート(`)で囲んだ文字列だったからであろう。

シングルクオート(')でくくり直して調べてみよう。

mysql> SELECT LENGTH('漢字を含む長いカラム名は大丈夫だろうか心配である');
+------------------------------------------------------------------------------------+
| LENGTH('漢字を含む長いカラム名は大丈夫だろうか心配である') |
+------------------------------------------------------------------------------------+
|                                                                                 72 |
+------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql>

UTF-8なので、漢字1文字は3バイトになってしまう。 64バイトにするために、最後の「である」を削除してみる。

mysql> SELECT LENGTH('漢字を含む長いカラム名は大丈夫だろうか心配');
+---------------------------------------------------------------------------+
| LENGTH('漢字を含む長いカラム名は大丈夫だろうか心配') |
+---------------------------------------------------------------------------+
|                                                                        63 |
+---------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql>

カラム名の長さが63バイトと確認できたので、 無茶ではあるがテーブルを作ってみよう。

mysql> CREATE TABLE `longcolumnname` ( `漢字を含む長いカラム名は大丈夫だろうか心配` int );
Query OK, 0 rows affected (0.00 sec)
 
mysql> INSERT INTO `longcolumnname` VALUES (1),(10),(100);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> SELECT `漢字を含む長いカラム名は大丈夫だろうか心配` FROM `longcolumnname`;
+-----------------------------------------------------------------+
| 漢字を含む長いカラム名は大丈夫だろうか心配 |
+-----------------------------------------------------------------+
|                                                               1 |
|                                                              10 |
|                                                             100 |
+-----------------------------------------------------------------+
3 rows in set (0.00 sec)

mysql>

大丈夫なようだ。 帳票の各項目にとんでもなく長い名称、そしてなおかつ英語やローマ字では 分かりづらいとき、日本語のままで何とかなりそうだ。たぶん。


戻る:一時テーブルの場合はどうなるか

次へ:メタデータの前後の空白は要注意


フィードバック:

Name:
Comment:
Hendrick: (Mon Feb 20 14:33:05 2012 )
Your wbsteie has to be the electronic Swiss army knife for this topic.

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

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