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

mysql:16341

From: "yoku ts." <"yoku ts." <yoku0825@xxxxxxxxxx>>
Date: Tue, 24 May 2016 11:00:25 +0900
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句の挙動に