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

mysql:15381

From: "Watanabe Tomoyuki" <"Watanabe Tomoyuki" <WATANABE.TOMOYUKI.2@xxxxxxxxxx>>
Date: Tue, 24 Aug 2010 08:56:19 +0900
Subject: [mysql 15381] Re: int column への2147483648

渡辺です。

余談になってしまいますが。


私も C API を触ったことはないです。
PHPのPDOを見回してみましたが、PDOからもPDOStatementからも
実行結果のWarningを取得することはできなさそうでした。
errorinfo的なものにはエラーしか入らないようですね。

面倒ですが「SHOW WARNINGS;」のSQLを別途実行してWarningが無いかを
確認するしかないのでしょうか・・・



> -----Original Message-----
> 
> 
> 坂井です
> 
> > そうなんですか?ちなみに、何という本でしょうか?調べてみたいと思い
> > ます。
> 
> http://www.amazon.co.jp/x/dp/4774142948
> エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
> 奥野幹也 著   技術評論社 刊
> 
>   です。
>   ちなみに、Google で、「奥野 本 MySQL」と検索するだけで、この本
>   の情報にたどり着けます:-)
> 
>   今回の話題に絞って言えば、4章の「SQLモード」の説明が役に立つと
>   思います。
>   要点だけ抜き書くと、「STRICT_ALL_TABLES (というSQLモードを指定すると)
>   全てのテーブルにおいてTRUNCATIONが行われなくなります。無効な値を
>   指定したときはエラーになります。」ということで、
>   今回のような期待と異なる値で登録されることを防ぐのに役にたつかと思いま
>   す。
>   
> > こちらは、プログラムインタフェースmysql_stmt_execute()の結果は0と
> > なり、エラーにならないんです。  
>   
>   私は C API でプログラムを書かないので、マニュアルをざっと調べて
>   見たのですが分かりませんでした。実行結果のWARNINGを取得する方法って、
>   どうやるのでしょうね。詳しい方、ぜひ教えてください!
>   
> 
> Thank you
> On Sat, 21 Aug 2010 10:39:39 +0900 (LMT)
> Etsuo SUMIYA <sumiya-e@xxxxxxxxxx> wrote:
> > sumiyaといいます。
> > 
> > From: SAKAI Kei <sak2@xxxxxxxxxx>
> > Subject: [mysql 15377] Re: int column への2147483648
> > Date: Fri, 20 Aug 2010 22:10:41 +0900
> > Message-ID: <20100820221039.6D79.51EA1301@xxxxxxxxxx>
> > 
> > > > 5.1.xになって、columnの型がunsignedに変わり、  
> > >  
> > >   の部分がとても気になりました。
> > >   バージョンアップをする過程のどこかで、signed int が
> > >   unsigned int になる操作が入ってしまったのだと推測し
> > >   ていますが、心当たりはあるでしょうか。
> > 
> > 5.0.47の環境で、columnを作る時、signedで作ってしまい、先の結果とな
> > りました。混乱させてしまいました。
> > 5.0.47でも、unsigned intのcolumnには-2147483648は書けませんでした。
> > 
> > >   
> > >   推測ついでにもうひとつ書くと、
> > >   おそらく 5.0.47 でも unsigned int にしたテーブルで
> > >   同様の操作をすると、同じ結果(0)になると思います。
> > >   処理結果のコードを見ると、Code:1264 の Warning が
> > >   帰ってきていませんか。メッセージはこんな感じです。
> > > 
> > >     Out of range value adjusted for column 'c1' at row 1
> > 
> > こちらは、プログラムインタフェースmysql_stmt_execute()の結果は0と
> > なり、エラーにならないんです。
> > 
> > >     INSERT INTO t VALUES (-2147483648);
> > >   
> > >   という文を、signed 型カラムのテーブルに対して実行すれば
> > >   -2147483648 が登録されるし、
> > >   unsigned型のテーブルに対して実行したら 0 になります。
> > >   
> > >   この切り捨てが起きないようにする方法も、最近出た奥野さん
> > >   の本に出ていましたね。(SQL MODE の話)
> > 
> > そうなんですか?ちなみに、何という本でしょうか?調べてみたいと思い
> > ます。
> 
> 
> 
> 

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

     15374 2010-08-19 20:46 [Etsuo SUMIYA <sumiya] int column への2147483648               
     15375 2010-08-19 21:50 ┗[Mikiya Okuno <mikiya]                                       
     15376 2010-08-20 08:23  ┗[Etsuo SUMIYA <sumiya]                                     
     15377 2010-08-20 22:10   ┗[SAKAI Kei <sak2@xxxx]                                   
     15378 2010-08-21 10:39    ┗[Etsuo SUMIYA <sumiya]                                 
     15379 2010-08-21 18:31     ┗[SAKAI Kei <sak2@xxxx]                               
->   15381 2010-08-24 08:56      ┗["Watanabe Tomoyuki" ]