Open Source WEB

今回は、SET NAMES cp932 でキャラクタセットをSHIFT-JISにした場合について 詳しく調べてみよう。

長いデータベース名は大丈夫だろうか。

mysql> SET NAMES cp932;
Query OK, 0 rows affected (0.00 sec)
 
mysql> CREATE DATABASE 長い名前は大丈夫か;
Query OK, 1 row affected (0.00 sec)
 
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| 長い名前は大丈夫か |
+--------------------+
4 rows in set (0.00 sec)

mysql> 

長いのは問題ないようだ。

「あ」は駄目だったが、「あ」を含むもっと長い名前として 「あいうえお」というデータベース名を試してみよう。

mysql> CREATE DATABASE あいうえお;
Query OK, 1 row affected (0.00 sec)
 
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| あいうえお         |
| 長い名前は大丈夫か |
+--------------------+
5 rows in set (0.00 sec)
 
mysql>

大丈夫だ。どういう事だろう。

今まで変になったのは、「あ、字、□」が最後になった場合である。 これらを最後につけてみよう。

mysql> CREATE DATABASE 最後の字;
Query OK, 1 row affected (0.00 sec)
 
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| あいうえお         |
| 最後の             |
| 長い名前は大丈夫か |
+--------------------+
6 rows in set (0.01 sec)
 
mysql>

やっぱり、「字」が最後にあると、駄目になった。 もしかして、データベース名に「字」を指定すると、「あ」のときのように なってしまうのではないだろうか。

mysql> CREATE DATABASE 字;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use
near '' at line 1
mysql>

やっぱりそうである。

ということは「あ、字、□」の文字に何か共通な特長があるはずだ。

mysql> SELECT HEX('あ字□');
+---------------+
| HEX('あ字□') |
+---------------+
| 82A08E9A81A0  |
+---------------+
1 row in set (0.01 sec)
                                                                                
mysql>

これを見ると、2バイト目が 9A または A0 の文字がトラブルになるらしい。

たとえば、「z」(全角英小文字)は、cp932だと 829A なので トラブルになると思われる。

mysql> create database z;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use
near '' at line 1
mysql>

トラブルになる漢字はいっぱいある。たとえば「帳」がそうだ。

mysql> CREATE DATABASE 元帳;
Query OK, 1 row affected (0.01 sec)
 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| 元                 |
+--------------------+
4 rows in set (0.01 sec)
 
mysql>

「元帳」を作ったら「元」だけになるのは相当まずいなぁ。


対策

ということで、cp932の場合、データベース名の最後に使ってはいけない 文字があるので、最後に何か大丈夫な文字追加してしまうという 無茶苦茶姑息な手段があるが、それは絶対に止めるべきだろう。

だからといって、データベース名の最後の1文字で使えそうに無い文字を避けるのは、 データベース名として意図していたものが使えなくなることであり、 それはやっぱり無茶苦茶困る。

さて、どうすればいいんだろう。


戻る:データベース名に漢字を使ってみよう

次へ:utf8では漢字のデータベース名はもっと変になる


フィードバック:

Name:
Comment:

There is no comment.

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

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