2011年8月 2日

[mysql 15607] Re: Indexをつけるとと、update のwhere 句マッチしない [Ver.4.1.23]

野副です。

平塚さん、有難うございます。

まさに、その回避方法を先ほど何とか探り当てた所でした。

phpMyadmin でテーブルを眺めていたら、それぞれのカラムに照合順序があり、
ひょっとして、これが怪しいのでは?と思い、


ALTER TABLE 'm_mac' CHANGE 'mac_id_no' 'mac_id_no' VARCHAR(8) CHARACTER
SET ASCII COLLATE ascii_general_ci NOT NULL;
#phpmyadin の画面上に出力された、「実行したSQL文」です。
#実際にやったのは、カラム変更、プルダウン選択、保存。

を実行し、照合順序を、ascii_general_ci に変更した所、

無事に該当レコードをupdate する事が出来ました。

バグ情報が何処にあるか解らなかった(バグ情報から検索する事が出来なかった
…)
ので、確信が持てずにいたのですが、平塚さんのメールでバグに該当している
と言う事に確信が持てましたので、これで延命処置を図りたいと思います。

ありがとうございました。

#phpMyAdmin が無かったら、こんなSQL文打てない…

P.S. 解せないのは、SELECT 文ではIndex が有効に働いているにも関わらず
何故、UPDATE 文ではIndex 検索で空振りするのだろうかと言うことです。
#UPDATE コマンドの応答速度からすると、いきなり該当無しで返ってきてい
#る気がする…

実行計画って、SELECT文のWHERE句とUPDATE 文のWHERE句で違うのでしょうか?
不思議です…


>> -----Original Message-----
>> From: HIRATSUKA Sadao [mailto:hiratsuka.sadao@xxxxx]
>> Sent: Tuesday, August 02, 2011 4:30 PM
>> To: ml@xxxxx
>> Subject: [mysql 15606] Re: Indexをつけるとと、update のwhere 句マ
>> ッチしない [Ver.4.1.23]
>>
>> こんにちは、平塚です。
>>
>> On Tue, 2 Aug 2011 13:26:57 +0900
>> 野副 勝己 <nozoe@xxxxx> wrote:
>>
>> > OS: Redhat ES4.5
>> > MySQL: Ver. 4.1.23
>>
>> > `mac_id_no` varchar(8) NOT NULL DEFAULT '',
>> > KEY `mac_id_no` (`mac_id_no`)
>> > ) ENGINE=InnoDB AUTO_INCREMENT=15000 DEFAULT CHARSET=utf8
>>
>> 以下のバグにヒットしているように見えます。
>>
>> Bug #28878
>> InnoDB tables with UTF8 character set and indexes cause wrong result
>> for DML
>> http://bugs.mysql.com/bug.php?id=28878
>>
>> もしUTF-8が必須でなければ、mac_id_no のみ
>> 別のキャラクタセットにしてみるのはいかがでしょうか。
>>
>> | Welcome to the MySQL monitor. Commands end with ; or \g.
>> | Your MySQL connection id is 1 to server version:
>> 4.1.22-community-max-nt
>> |
>> | mysql> alter table test modify c2 varchar(10) character set latin1;
>> | Query OK, 0 rows affected (0.22 sec)
>> | Records: 0 Duplicates: 0 Warnings: 0
>> |
>> | mysql> show create table test\G
>> | *************************** 1. row ***************************
>> | Table: test
>> | Create Table: CREATE TABLE `test` (
>> | `c1` int(11) NOT NULL default '0',
>> | `c2` varchar(10) character set latin1 default NULL,
>> | PRIMARY KEY (`c1`)
>> | ) ENGINE=InnoDB DEFAULT CHARSET=utf8
>> | 1 row in set (0.00 sec)
>>
>> また、別のバグレポートですと、
>>
>> Bug #31395
>> equality match in a where clause against an utf8 field fails
>> http://bugs.mysql.com/bug.php?id=31395
>>
>> ・like検索にすると回避できる
>> ・4.1.22では発生しない
>>
>> という情報があります。
>>
>> --
>> 平塚貞夫 hiratsuka.sadao@xxxxx
>>
>>


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




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