mysql:14016
From: "Takayuki Miura" <"Takayuki Miura" <atamaitakunai@xxxxxxxxxx>>
Date: Fri, 25 May 2007 20:35:14 +0900
Subject: [mysql 14016] Re: unsigned int に関するクエリ結果
To:YuGoさま 三浦です、アドバイスありがとうございます。 今回実装したシステムの要件的に、エラーでけられるより 都合がよかったので、MySQLの特技にあまえていました(笑)。 > 今のままで行くなら、 > sql>UPDATE SET id = CASE WHEN (id - 100) < 0 THEN 0 ELSE (id - 100) END ; > とかやってみてください。 上記ですが、WHEN id - 100 の判定がやはり、同じ問題にぶつかってしまうようです。 WHEN id < 100 に変更したら、OKでした。 今回は、上記の方針で対応しようと思います。 ありがとうございました。 07/05/25 に YuGo<yu.gotou@xxxxxxxxxx> さんは書きました: > みうらどの。 > こういうデータの範囲外の受け止めてしまうのは、MySQLの特技(ふとっぱら)か > も知れません。 >でも、 > sql>SET sql_mode=STRICT_ALL_TABLES > したり、my.ini[mysqld]にsql_mode=STRICT_ALL_TABLESと書いたりすれば、 > エラーでけってくれるようになっているようです。 > http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html > 個人的には、こっちの方がまとものような気がしますが、みうらさんはどちらが > おこのみでしょうか。 > > 今のままで行くなら、 > sql>UPDATE SET id = CASE WHEN (id - 100) < 0 THEN 0 ELSE (id - 100) END ; > とかやってみてください。 > > > > > > > いつも勉強させていただいてます。 > > > > unsigned int に対するクエリの結果が予想と異なり > > 原因が分からなかったので質問させていただきます。 > > ご教授いただければ幸いです。 > > よろしくお願いいたします。 > > > > ■MySQL > > var.5.0.37 > > > > ■テーブル定義 > > CREATE TABLE `test` ( > > `id` INTEGER UNSIGNED NOT NULL DEFAULT 0, > > PRIMARY KEY(`id`) > > ) > > > > ■存在するレコード > > id > > --------- > > 0 > > > > ■問題のクエリ > > update test set id = id - 100; > > > > ■問題の結果 > > 「0」になると思いきや、「4294967295」になってしまった。 > > > > > > ※以下補足 > > 下記のクエリに関しては、予想通りの結果 > > ・クエリ > > update test set id = -100; > > ・結果 > > 0 > > > > ・クエリ > > update test set id = 100000000000; > > ・結果 > > 4294967295 > > > > > >
14011 2007-05-25 16:05 ["Takayuki Miura" <at] unsigned int に関するクエリ結果 14013 2007-05-25 18:42 ┣[N.Toge <toge@xxxxxxx] 14015 2007-05-25 19:22 ┃┣[MURAKAMI Tomokazu <t] 14017 2007-05-25 20:42 ┃┗["Takayuki Miura" <at] 14014 2007-05-25 19:09 ┗[YuGo <yu.gotou@xxxxx] -> 14016 2007-05-25 20:35 ┗["Takayuki Miura" <at]