[前][次][番号順一覧][スレッド一覧]

mysql:9894

From: Hirofumi Fujiwara <Hirofumi Fujiwara <fuji@xxxxxxxxxx>>
Date: Thu, 22 Jul 2004 14:01:17 +0900 (JST)
Subject: [mysql 09894] Re: 4.1.3のujis

藤原です。

> はじめまして、Tatsuと申します。
> 
> 4.1.1で運用していたものを4.1.3に移行したら
> 特殊文字、(株)がINSERTできなくなりました。
> その他の特殊文字、丸の中の1なども駄目です。
> (NEC特殊文字?)
> 
> サーバーはdefault-character-set=ujisです。
> フィールドのCollationはujis_japanese_ciです。
> 
> (株)などはPHPでSJISからEUCに変換した後にINSERTしております。
> ちなみに4.1.2でも同じ症状がでます。
> 
> 原因が4.1.2から実装されている文字コードの自動変換かと思い、
> 直接EUCの(株)のHEX値 0xADEA をバイナリで入れても駄目でした。
> 
> INSERT  INTO test VALUES ( CAST( 0xADEA AS binary )  );
> 
> 4.1.1では同じSQLでうまく(株)が入ります。
> バイナリで入れているのでクライアント間との
> 文字コード自動変換は関係ないと思われるのですが、
> 回避方法等がもしあるのであれば、
> お知恵を貸していただければと思います。
> 
> よろしくお願い致します。

確認してみましたが、その通りのようです。4.1.3にて確認。

とりあえずは、UJIS で色々と入れてみました。
標準で定義されていない場所と、外字領域と決められている個所以外は駄目み
たいです。

_ujis, _binary どちらでやっても同じでした。

character set ujis と指定されていると、ujis以外の文字が来たら、それ以
降は無視されるみたいです。エラーも出さずに、入ったふりをされるのはとて
も困ったものです。

カラムを binary にしてしまえば、一応何でも入るようにはなって誤魔化せる
ことは確かなのだが、それを解決というのは違うと思う。

各文字コードにおいて、どの範囲がOKで、どの範囲が駄目というのは特に明記
されていないようですね。これは、是非記述して欲しい。
日本語の場合、メーカー外字などの問題が特に大きいので、そのあたりの情報
は欲しいです。

------------------------------------------------------------------
★ _ujis の場合

mysql> create table test ( a varchar(10) character set ujis );
Query OK, 0 rows affected (0.00 sec)
 
mysql> INSERT INTO test VALUES (_ujis 0xA2AE);
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO test VALUES (_ujis 0xA2AF);
Query OK, 1 row affected, 1 warning (0.00 sec)
 
mysql> INSERT INTO test VALUES (_ujis 0xADEA);
Query OK, 1 row affected, 1 warning (0.00 sec)
 
mysql> INSERT INTO test VALUES (_ujis 0xF5A1);
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO test VALUES (_ujis 0xF5FE);
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO test VALUES (_ujis 0xF5FF);
Query OK, 1 row affected, 1 warning (0.00 sec)
 
mysql> select a, hex(a) from test;
+------+--------+
| a    | hex(a) |
+------+--------+
| =   | A2AE   |
|      |        |
|      |        |
| ??   | F5A1   |
| ??   | F5FE   |
|      |        |
+------+--------+
6 rows in set (0.00 sec)
 
★ _binary の場合

mysql> delete from test;
Query OK, 6 rows affected (0.00 sec)

mysql> INSERT INTO test VALUES (_binary 0xA2AE);
Query OK, 1 row affected (0.06 sec)
 
mysql> INSERT INTO test VALUES (_binary 0xA2AF);
Query OK, 1 row affected, 1 warning (0.00 sec)
 
mysql> INSERT INTO test VALUES (_binary 0xADEA);
Query OK, 1 row affected, 1 warning (0.00 sec)
 
mysql> INSERT INTO test VALUES (_binary 0xF5A1);
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO test VALUES (_binary 0xF5FE);
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO test VALUES (_ujis 0xF5FF);
Query OK, 1 row affected, 1 warning (0.00 sec)
 
mysql> select a, hex(a) from test;

mysql> select a, hex(a) from test;
+------+--------+
| a    | hex(a) |
+------+--------+
| =   | A2AE   |
|      |        |
|      |        |
| ??   | F5A1   |
| ??   | F5FE   |
|      |        |
+------+--------+
6 rows in set (0.00 sec)

★ 許容されていない文字を含む場合の例

mysql> delete from test;
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO test VALUES (_binary 0xA2AEA2AFA2BA);
Query OK, 1 row affected, 1 warning (0.00 sec)
 
mysql> select a, hex(a) from test;
+------+--------+
| a    | hex(a) |
+------+--------+
| =   | A2AE   |
+------+--------+
1 row in set (0.00 sec)
 
★ カラムをbinary にしてしまった場合

mysql> drop table test;
Query OK, 0 rows affected (0.00 sec)
 
mysql> create table test ( a varchar(10) character set binary );
Query OK, 0 rows affected (0.05 sec)
 
mysql> INSERT INTO test VALUES (_binary 0xA2AEA2AFA2BA);
Query OK, 1 row affected (0.00 sec)
 
mysql> INSERT INTO test VALUES (_ujis 0xA2AEA2AFA2BA);
Query OK, 1 row affected (0.00 sec)
 
mysql> select a, hex(a) from test;
+--------+--------------+
| a      | hex(a)       |
+--------+--------------+
| =??∈ | A2AEA2AFA2BA |
| =??∈ | A2AEA2AFA2BA |
+--------+--------------+
2 rows in set (0.00 sec)

------------------------------------------------------------------
株式会社 タイムインターメディア       藤原 博文 fuji@xxxxxxxxxx
本社 160-0002 東京都新宿区坂町26-27 IPBビル    TEL 03-5362-9009
URL  http://www.timedia.co.jp/                    FAX 03-5362-9008
地図 http://www.timedia.co.jp/company/map/     新宿線曙橋駅徒歩5分
------------------------------------------------------------------
♪  Puzzle Japan  http://www.puzzle.jp/  毎日新作パズルで遊ぼう ♪
------------------------------------------------------------------

[前][次][番号順一覧][スレッド一覧]

      9870 2004-07-17 14:49 ["Tatsuya Yoshizawa" ] 4.1.3のujis                             
->    9894 2004-07-22 14:01 ┗[Hirofumi Fujiwara <f]                                       
      9899 2004-07-26 11:44  ┗["Tatsuya Yoshizawa" ]                                     
      9900 2004-07-27 16:31   ┗[Hirofumi Fujiwara <f]