2010年8月21日

[mysql 15379] Re: int column への2147483648

坂井です

> そうなんですか?ちなみに、何という本でしょうか?調べてみたいと思い
> ます。

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@xxxxx> wrote:
> sumiyaといいます。
>
> From: SAKAI Kei <sak2@xxxxx>
> Subject: [mysql 15377] Re: int column への2147483648
> Date: Fri, 20 Aug 2010 22:10:41 +0900
> Message-ID: <20100820221039.6D79.51EA1301@xxxxx>
>
> > > 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 の話)
>
> そうなんですか?ちなみに、何という本でしょうか?調べてみたいと思い
> ます。


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




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