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 にメタデ−タの説明があり、 カラム名についての説明もある。
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>
大丈夫なようだ。 帳票の各項目にとんでもなく長い名称、そしてなおかつ英語やローマ字では 分かりづらいとき、日本語のままで何とかなりそうだ。たぶん。
フィードバック: