2009年4月18日

[mysql 14811] Re: SJISで文字コードがシフト?してしまい検索できない

松信です。

立岡さん、バグ情報ばかりか
パッチまで作成してくださってありがとうございます。
5.0だけでなく、5.1と6.0でもsjis/cp932について
コードは同じなので、新規のバグかと思います。

立岡さんのパッチで良いと思います。

eucjpms/ujis/utf8ではそうなっていますから、
日本語環境ではsjis/cp932のみで発生する現象
(といっても0x5CとかシフトJIS固有の問題ではなく単なるバグ)
ということになるでしょう。

お手数ですが、本現象とパッチについて、
バグレポートの方に登録して頂くことはできませんでしょうか?
http://bugs.mysql.com/report.php

ご面倒でしたらこちらでやっておきますのでお知らせください。

以上です。よろしくお願い致します。

--
Yoshinori Matsunobu
Principal MySQL Consultant
Sun Microsystems

MySQL Consulting Services:
http://www-jp.mysql.com/consulting/


> 立岡です。
>
> ソースコード眺めてみたらおかしなところを発見しました。
> ようするにUPPERとLOWERがlatin1と同じ関数が使われているようです。
> これをマルチバイト用の関数に直したらうまく動きました。
> (この関数がcp932とsjisに対応しているという前提ですが。。。)
> 動作は下記です。そのあとパッチです。
> cp932だけでなくsjisもコードがおかしいようです。
>
> mysql> show create table t;
> +-------+-----------------------------------------------------------------------------------------+
> | Table | Create Table
> |
> +-------+-----------------------------------------------------------------------------------------+
> | t | CREATE TABLE `t` (
> `a` varchar(16) default NULL
> ) ENGINE=MyISAM DEFAULT CHARSET=cp932 |
> +-------+-----------------------------------------------------------------------------------------+
> 1 row in set (0.00 sec)
>
> mysql> SELECT a, HEX(a), HEX(UPPER(a)) FROM t;
> +--------+----------+---------------+
> | a | HEX(a) | HEX(UPPER(a)) |
> +--------+----------+---------------+
> | ビタ | 8372835E | 8372835E |
> | ABC | 414243 | 414243 |
> | abc | 616263 | 414243 |
> +--------+----------+---------------+
> 3 rows in set (0.02 sec)
>
> mysql> select * from t WHERE upper(a)="ビタ";
> +--------+
> | a |
> +--------+
> | ビタ |
> +--------+
> 1 row in set (0.00 sec)
>
> mysql> select * from t WHERE upper(a)="コタ";
> Empty set (0.00 sec)
>
>
> パッチ
> --- mysql-5.0.77-org/strings/ctype-cp932.c 2009-01-30 06:45:47.000000000
> +0900
> +++ mysql-5.0.77-new/strings/ctype-cp932.c 2009-04-18 12:34:32.000000000
> +0900
> @@ -5485,10 +5485,10 @@
> my_numcells_cp932,
> my_mb_wc_cp932, /* mb_wc */
> my_wc_mb_cp932, /* wc_mb */
> - my_caseup_str_8bit,
> - my_casedn_str_8bit,
> - my_caseup_8bit,
> - my_casedn_8bit,
> + my_caseup_str_mb,
> + my_casedn_str_mb,
> + my_caseup_mb,
> + my_casedn_mb,
> my_snprintf_8bit,
> my_long10_to_str_8bit,
> my_longlong10_to_str_8bit,
> satoshi@xxxxx:~/Downloads$ diff -u mysql-5.0.77-org/strings/ctype-sjis.c
> mysql-5.0.77-new/strings/ctype-sjis.c
> --- mysql-5.0.77-org/strings/ctype-sjis.c 2009-01-30 06:45:48.000000000
> +0900
> +++ mysql-5.0.77-new/strings/ctype-sjis.c 2009-04-18 12:35:00.000000000
> +0900
> @@ -4648,10 +4648,10 @@
> my_numcells_sjis,
> my_mb_wc_sjis, /* mb_wc */
> my_wc_mb_sjis, /* wc_mb */
> - my_caseup_str_8bit,
> - my_casedn_str_8bit,
> - my_caseup_8bit,
> - my_casedn_8bit,
> + my_caseup_str_mb,
> + my_casedn_str_mb,
> + my_caseup_mb,
> + my_casedn_mb,
> my_snprintf_8bit,
> my_long10_to_str_8bit,
> my_longlong10_to_str_8bit,
>

投稿者 xml-rpc : 2009年4月18日 15:38
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/84403
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。