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

mysql:14808

From: SAKAI Kei <SAKAI Kei <sak2@xxxxxxxxxx>>
Date: Fri, 17 Apr 2009 21:12:59 +0900
Subject: [mysql 14808] Re: SJISで文字コードがシフト?してしまい検索できない

坂井です

  浅山さん。
  現象の報告だけ書いて、どうしたらいいかを書いていませんでした。
  
  さしあたって、もし要件上可能なら (たとえば "ビタミン"をマッチ
  させたいカラムの)検索条件での UPPER( ) をはずせば期待通りの
  動作になるかと思います。
  テーブル定義をざっと見たところ varchar()カラムに binary が指定
  されていないので大文字小文字を同一視してくれますから、upper()
  を外しても問題ないように思えます。
  
  例)先ほどの私のテストデータで:
  mysql> select * from t WHERE a="abc";
+------+
| a    |
+------+
| ABC  | 
| abc  | 
+------+
2 rows in set (0.01 sec)
  upperなくてもマッチします。
  
  
それにしても、マニュアルにはこう書いてあるのにねぇ・・・:
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_upper
>This function is multi-byte safe. 


Thank you
On Fri, 17 Apr 2009 21:00:38 +0900
SAKAI Kei <sak2@xxxxxxxxxx> 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@xxxxxxxxxx (浅山雄三) 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^)浅山雄三
> 



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

     14789 2009-04-15 19:14 [<ALCYONE@xxxxxxxxxx>] SJISで文字コードがシフト?してしまい検索できない
     14790 2009-04-15 19:28 ┣[Isamu Moriyama <mori]                                       
     14791 2009-04-15 19:43 ┃┗[<ALCYONE@xxxxxxxxxx>]                                     
     14792 2009-04-15 20:17 ┣[SAKAI Kei <sak2@xxxx]                                       
     14795 2009-04-16 15:06 ┃┣[<ALCYONE@xxxxxxxxxx>]                                     
     14796 2009-04-16 15:13 ┃┃┣[<ALCYONE@xxxxxxxxxx>]                                   
   @ 14800 2009-04-16 17:28 ┃┃┃┗[chuuken kenkou <ken_]                                 
     14803 2009-04-17 19:51 ┃┃┃ ┗[<ALCYONE@xxxxxxxxxx>]                               
     14805 2009-04-17 20:50 ┃┃┃  ┗[Satoshi Tatsuoka <sa]                             
     14802 2009-04-17 17:05 ┃┃┗[SAKAI Kei <sak2@xxxx]                                   
     14806 2009-04-17 20:55 ┃┃ ┗[<ALCYONE@xxxxxxxxxx>]                                 
     14801 2009-04-17 15:52 ┃┗[Mikiya Okuno <Mikiya]                                     
     14804 2009-04-17 20:38 ┃ ┗[<ALCYONE@xxxxxxxxxx>]                                   
     14807 2009-04-17 21:00 ┃  ┗[SAKAI Kei <sak2@xxxx]                                 
->   14808 2009-04-17 21:12 ┃   ┣[SAKAI Kei <sak2@xxxx]                               
     14810 2009-04-18 13:37 ┃   ┃┗[Satoshi Tatsuoka <sa]                             
     14811 2009-04-18 15:38 ┃   ┃ ┣[Yoshinori Matsunobu ]                           
     14813 2009-04-18 17:03 ┃   ┃ ┃┗[Satoshi Tatsuoka <sa]                         
     14814 2009-04-18 17:17 ┃   ┃ ┃ ┗[Yoshinori Matsunobu ]                       
     14815 2009-04-20 10:03 ┃   ┃ ┃  ┗[<ALCYONE@xxxxxxxxxx>]                     
     14821 2009-05-06 14:05 ┃   ┃ ┃   ┗[SAKAI Kei <sak2@xxxx]                   
     14840 2009-05-09 12:01 ┃   ┃ ┃    ┣[SAKAI Kei <sakaik@xx]                 
     14956 2009-07-06 16:57 ┃   ┃ ┃    ┗[SAKAI Kei <sak2@xxxx] MySQL 5.1.36 リリース(was Re:  Re: SJISで文字コードがシフト?してしまい検索できない
     14812 2009-04-18 16:10 ┃   ┃ ┗[SAKAI Kei <sak2@xxxx]                           
     14809 2009-04-17 21:23 ┃   ┗[Satoshi Tatsuoka <sa]                               
     14794 2009-04-15 23:37 ┗[とみたまさひろ <tomm]                                       
     14797 2009-04-16 15:34  ┗[<ALCYONE@xxxxxxxxxx>]                                     
     14798 2009-04-16 15:41   ┗["Y. Tsutsui" <tutui@]                                   
     14799 2009-04-16 16:44    ┗[<ALCYONE@xxxxxxxxxx>]