2009年4月17日

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

立岡です。

坂井さん。こちらでも試してみました。この現象、確かに起きますね。
2バイト目がUPPERされました。とりあえずご報告まで。

(2009年04月17日 21:00), SAKAI Kei wrote:
> 坂井です。
>

> ああっ!浅山さん、upper() していたのですね。
> これがたぶんみんなが一番知りたかった情報です。
>
> 私のほうでも試してみたところ、どうも charset の設定にかかわらず
> upper されてしまうような挙動に見えます。不具合な予感。
> 以下皆さんにも判断していただきたく、やったことを書きます。
>
> --テーブルを作成し、データを3件INSERT。
> mysql> create table t (a varchar(16)) engine=myisam default charset=cp932;
> mysql> insert into t values ("ビタ");
> mysql> insert into t values ("ABC");
> mysql> insert into t values ("abc");
>
> --UPPER() の挙動を確認(参考)
> mysql> select * from t WHERE upper(a)="ABC";
> +------+
> | a |
> +------+
> | ABC |
> | abc |
> +------+
> 2 rows in set (0.00 sec)
>
> --問題の日本語文字でUPPER()の挙動を確認
> mysql> select * from t WHERE upper(a)="ビタ";
> Empty set (0.01 sec)
>
> mysql> select * from t WHERE upper(a)="コタ";
> +------+
> | a |
> +------+
> | ビタ |
> +------+
> 1 row in set (0.00 sec)
>
>
> ===============
> --UPPER()関数によって CP932の2バイト目がUPPERされてしまっていることの確認(不具合と思います)
>
> mysql> SELECT a, HEX(a), HEX(UPPER(a)) FROM t;
> +------+----------+---------------+
> | a | HEX(a) | HEX(UPPER(a)) |
> +------+----------+---------------+
> | ビタ | 8372835E | 8352835E |
> | ABC | 414243 | 414243 |
> | abc | 616263 | 414243 |
> +------+----------+---------------+
> 3 rows in set (0.00 sec)
>
>
> ===============
> --環境とか
> mysql> SHOW CREATE TABLE t\G
> *************************** 1. row ***************************
> Table: t
> Create Table: CREATE TABLE `t` (
> `a` varchar(16) default NULL
> ) ENGINE=MyISAM DEFAULT CHARSET=cp932
> 1 row in set (0.00 sec)
>
> mysql> status
> --------------
> :
> Server version: 5.0.45 Source distribution
> :
> Server characterset: cp932
> Db characterset: cp932
> Client characterset: cp932
> Conn. characterset: cp932
> --------------
>
> mysql> show create database test;
> +----------+----------------------------------------------------------------+
> | Database | Create Database |
> +----------+----------------------------------------------------------------+
> | test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET cp932 */ |
> +----------+----------------------------------------------------------------+
> 1 row in set (0.00 sec)
>
> Thank you
>
> On Fri, 17 Apr 2009 20:38:31 +0900
> ALCYONE@xxxxx (浅山雄三) wrote:
>> 奥野様
>>
>> 浅山です。いつもお世話になります。
>>
>>
>> >その現象はテーブルの文字コードが違うときの現象に似てるんですが、
>> >もう一度テーブルの文字コードを確認して頂けませんか?
>> >
>> >mysql> SHOW CREATE TABLE テーブル名\G
>>
>> | Aテーブル | CREATE TABLE `Aテーブル` (
>> `AA_num` varchar(16) NOT NULL,
>> `BB_num` varchar(16) DEFAULT NULL,
>> `CC_num` varchar(16) DEFAULT NULL,
>> `DD_sb` text,
>> `EE_mei` text,
>> (以下、同様の行が205行)
>> `biko3` text,
>> `update_dattim` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON
>> UPDATE CURRENT_TIMESTAMP,
>> `FF_flg` varchar(1) DEFAULT NULL,
>> `GG_num` varchar(16) DEFAULT NULL,
>> `HH_num` varchar(16) DEFAULT NULL,
>> `II_url` varchar(500) DEFAULT NULL,
>> `biko4` text,
>> `biko5` text,
>> PRIMARY KEY (`AA_num`),
>> UNIQUE KEY `Aテーブル_uk1` (`JJ_num`),
>> KEY `Aテーブル_KK_num_idx1` (`LL_num`),
>> KEY `MM_flg_idx` (`LL_flg`)
>> ) ENGINE=MyISAM DEFAULT CHARSET=cp932 |
>>
>>
>> | Bテーブル | CREATE TABLE `Bテーブル` (
>> `AA_num` varchar(16) NOT NULL DEFAULT '',
>> `data` longtext,
>> `ngram` longtext,
>> PRIMARY KEY (`AA_num`),
>> FULLTEXT KEY `ngram` (`ngram`)
>> ) ENGINE=MyISAM DEFAULT CHARSET=cp932 |
>>
>>
>> >あと、問題になってるSELECT文も見せて頂けますでしょうか?
>>
>> select SQL_SMALL_RESULT AA_NUM, BB_NUM, CC_KJ, DD_EN, EE_EN,
>> FF_KJ1,length(trim(BB_NUM)) BB_NUM_LEN from Aテーブル DT, Bテーブル
>> TP where ((upper(DD_EN) like '%ビタミン%' or upper(GG_EN) like '%ビ
>> タミン%' or upper(CC_KJ) like '%ビタミン%') and (upper(DD_EN) like
>> '%サプリメント%' or upper(GG_EN) like '%サプリメント%' or upper
>> (CC_KJ) like '%サプリメント%')) and (upper(substr(HH_CD1,1,1)) =
>> 'B' or upper(substr(II_CD2,1,1)) = 'B' or upper(substr(JJ_CD3,1,1))
>> = 'B') and AA_NUM = TP.KANRI_NUM and (MATCH(NGRAM) AGAINST('+栄養
>> *' IN BOOLEAN MODE)) order by CC_KJ
>>
>>
>> ※ Aテーブルは[mysql 14797]のAテーブル
>> Bテーブルは[mysql 14797]のBテーブル
>> フィールド名の一部を実際とはかえています。
>>
>>
>> 2009年4月17日 20:38:27 (^o^)浅山雄三
>
>
>


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




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