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

mysql:16343

From: "yoku ts." <"yoku ts." <yoku0825@xxxxxxxxxx>>
Date: Wed, 25 May 2016 14:15:01 +0900
Subject: [mysql 16343] Re: [mysql 16342] RE: [mysql 16341] Re: [mysql 16340] ストアド内SelectInto句の挙動について(MySQL5.7)

こんにちは、yoku0825です。


5.7.11のチェンジログにこんなものを見つけました。

> Data corruption or a server exit could occur if a stored procedure had a variable declared as TEXT or BLOB and data was copied to that variable using SELECT ... INTO syntax from a TEXT or BLOB column. (Bug #22203532, Bug #22232332, Bug #21941152)


http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-11.html


var_textはTEXT型なので、これにマッチしているような気がします。
(8桁バグ番号はOracle社管理のバグ番号なので、詳細は外部から見られないのですが)

しかし "or a server exit"ってなかなかゴツいですね。。


yoku0825,

2016年5月24日 12:43 たくや <yata.s15ste@xxxxxxxxxx>:
> yokuさま

>

> 返信ありがとうございます。たくやです。

>

> まず、後半の

> SET SESSION optimizer_switch= 'mrr=off';

> について試してみましたが、var_text ->[eeee]で出力しました(改善せず)

>

>>元のデータで、暗黙の型変換などでvarcharがDOUBLEにキャストされて

>>が2行返しちゃってるとかそんなことはないでしょうか…。

> 確かに挙動を発見した際のSELECT INTO文(郵便番号TBL時)では

> 2行返しそうなんですけど、サンプル提示した状態だと

> cd自体が一意になってますから2行は返らないと思います。

>

>

> 私も別環境RHEL6系+MySQL5.7.12-Enterprise版で

> 試してみたんですが、この条件では発生しませんでした。

>

> 今のところ、yokuさまの3端末に加えて、

> 私が確認できる2端末でも発生せずでしたので、

> 発生した環境(自機MySQL 5.7.10)のみで確認できる内容となりました。

>

> 自機MySQL 5.7.10については

> 他の環境が新規でインストールしたものに対して、

> MySQL 5.6系からyum + mysql_upgradeしたという違いがあるぐらいです。

>

>

> 記載いただいたURL内の暗黙の型変換が

> 一番可能性が高そうだなって思ってみてましたが

> 自分が保有する1環境のみで発生しているとなると

> 環境依存かパラメータの可能性が濃厚ですね。

>

>

> ちなみに申し上げると、

>  |---------------------------------------------------------|

>  |zipcode| state |              city|                 town |

>  |---------------------------------------------------------|

>  |0010000| 北海道|        札幌市北区|  以下に掲載がない場合|

>  |    ・・・|    ・・・|               ・・・|                   ・・・|

>  |9071800| 沖縄県|  八重山郡与那国町|  以下に掲載がない場合|

>  |9071801| 沖縄県|  八重山郡与那国町|                与那国|

>  ----------------------------------------------------------

> 挙動発見時時はこんな感じの郵便番号テーブル(cityとtownを取得)でして、

>

> 条件のZipcodeに何を設定しても

> cityは[八重山郡与那国町]

> townに至っては[与那国掲載](一部結合???)

> という結果が返ってきてました。

>

> 八重山郡与那国町のデータはテーブル上最後の行と最後から2番目行ですね。

>

>

> なかなか香ばしい挙動です。

>

> -----Original Message-----

> From: yoku ts. [mailto:yoku0825@xxxxxxxxxx]

> Sent: Tuesday, May 24, 2016 11:00 AM

> To: ml@xxxxxxxxxx

> Subject: [mysql 16341] Re: [mysql 16340] ストアド内SelectInto句の挙動について(MySQL5.7)

>

> こんにちは、yoku0825といいます。

>

> 取り急ぎ、CentOS 6.6のMySQL 5.7.10とMySQL 5.7.12、

> Windowsの5.7.10(x64)でもいただいたテストケースだと再現しませんでした。

>

> 元のデータで、暗黙の型変換などでvarcharがDOUBLEにキャストされて

>> select word,word

>> into var_text,var_text2

>> from dtb_test

>> where cd = '1111';

>

> が2行返しちゃってるとかそんなことはないでしょうか…。

>

> http://soudai1025.blogspot.jp/2015/12/mysql.html

>

>

> それか、5.6の初期ではMRRが同じ行を2回返しちゃうようなバグがあったので、

> それを疑うなら

>

> mysql> SET SESSION optimizer_switch= 'mrr=off';

> としてから、CALL test_proc(); してみてもらえませんか?

>

>

> yoku0825,

>

>

> 2016年5月23日 16:28  <yata.s15ste@xxxxxxxxxx>:

>> 初めて投稿させていただきます。

>> 開発者のたくやと申します。

>>

>>

>> 当方が利用している環境において、

>> 不具合か仕様通りかどうか判断しかねる事象が発生したので、

>> 皆様の知恵をお借りしたいと思い投稿させていただきました。

>>

>>

>> [概要]

>>  MySQL5.7系環境において、

>>  ストアドプロシージャ(もしくはファンクション)内で

>>  非キー項目によるWhere条件を設定し、

>>  Select Into 句を利用したときの挙動が思惑と異なる。

>>

>> [実行環境]

>>   ・Linux RHEL6系

>>   ・MySQL 5.7.10-log Community Server

>>  ・スキーマのデフォルト文字コードはUTF-8

>>

>>

>> [再現手順]

>>  1)前提として、以下テーブルを作っておく。

>>    CREATE TABLE `dtb_test` (

>>      `iddtb_test` int(11) NOT NULL AUTO_INCREMENT,

>>      `cd` varchar(12) DEFAULT '',

>>      `word` varchar(45) DEFAULT NULL,

>>      PRIMARY KEY (`iddtb_test`)

>>    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

>>

>>  2)以下データを設定する。

>>         ①iddtb_test ②cd ③word

>>         |--------------|

>>         |①|  ②|    ③|

>>         |--------------|

>>         |1| 1111|  aaaa|

>>         |2| 2222|  bbbb|

>>         |3| 3333|  cccc|

>>         |4| 4444|  dddd|

>>         |5| 5555|  eeee|

>>         ----------------

>>

>>  3)以下ストアドをデモとして作成する。

>>         DELIMITER $$

>>         CREATE PROCEDURE `test_proc`()

>>         BEGIN

>>

>>         declare var_text text default '';

>>         declare var_text2 varchar(45) default '';

>>

>>         select word,word

>>         into var_text,var_text2

>>         from dtb_test

>>         where cd = '1111';

>>

>>         select var_text,var_text2;

>>

>>         END$$

>>         DELIMITER ;

>>

>>  4)作成したストアドを実行する。

>>

>> [求める結果として]

>>   最後のSelect文で出力される結果がいずれも[aaaa]となること。

>>

>> [結果]

>>   var_text ->[eeee](こちらが思惑と異なる)

>>   var_text2->[aaaa]

>>

>>

>> [補足事項]

>>  ・MySQL 5.6.26 Community Server (Windows7)では求める結果var_text ->[aaaa]

>> が出力されました。

>>  ・該当の条件句であるcdをInt型に変更してもvar_text ->[eeee]で出力されまし

>> た。

>>  ・条件句のcdに対してUnique Indexを付与すると、var_text ->[aaaa]で出力され

>> ました。

>>  ・元々は郵便番号TBLのzipcodeで検索をかけるような処理のときに発生した事象の

>> 為、

>>   Unique Indexを仕様的に付与できかねます。

>>  ・Select Into時に Convert(word,char)をするとvar_text ->[aaaa]で出力されま

>> した。

>>

>>

>> 現象が発生してから、補足事項に提示したパターンなどを検証しました。

>>

>> 検証の結果、varchar型の文字列をTEXT型変数に入れる際に

>> 条件句をスルーしてしまうような不具合があるののかなとも思っていますが、

>> もしかしたらTEXT型とvarchar型が非互換という可能性も考えて、

>> 質問させていただきました。

>>

>> どなたかご教示いただければ幸いです。

>>

>> 以上、よろしくお願いいたします。

>>

>>


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

     16340 2016-05-23 16:28 [<yata.s15ste@xxxxxxx] ストアド内SelectInto句の挙動について(MySQL5.7)
     16341 2016-05-24 11:00 ┗["yoku ts." <yoku0825] Re: [mysql 16340] ストアド内SelectInto句の挙動について(MySQL5.7)
     16342 2016-05-24 12:43  ┗[たくや <yata.s15ste@] RE: [mysql 16341] Re: [mysql 16340] ストアド内SelectInto句の挙動について(MySQL5.7)
->   16343 2016-05-25 14:15   ┗["yoku ts." <yoku0825] Re: [mysql 16342] RE: [mysql 16341] Re: [mysql 16340] ストアド内SelectInto句の挙動について(MySQL5.7)
     16344 2016-05-25 15:42    ┗[たくや <yata.s15ste@] RE: [mysql 16343] Re: [mysql 16342] RE: [mysql 16341] Re: [mysql 16340] ストアド内SelectInto句の挙動について(MySQL5.7)
     16345 2016-05-25 15:46     ┗["yoku ts." <yoku0825] Re: [mysql 16344] RE: [mysql 16343] Re: [mysql 16342] RE: [mysql 16341] Re: [mysql 16340] ストアド内SelectInto句の挙動について(MySQL5.7)
     16346 2016-05-25 16:01      ┗[たくや <yata.s15ste@] RE: [mysql 16345] Re: [mysql 16344] RE: [mysql 16343] Re: [mysql 16342] RE: [mysql 16341] Re: [mysql 16340] ストアド内SelectInto句の挙動に