2008年3月20日(木曜日)

“unsigned” にハマりました・・・

カテゴリー: - gusagi @ 09時32分11秒

最近、花粉症でティッシュが手放せないgusagiです。
今日は、つい先日にモジュールを作成している際にハマったことについて書きます。

XOOPSモジューでは、ユーザのIDをDBに保存するケースが結構あります。
フォーラムの書き込みだったら、誰が書き込んだか判るように保存する、という具合にです。
今回、{prefix}_usersテーブルの定義に合わせて、mediumint型で作成で作成したんですが、
発行しているSQLと別の値がDBに保存されていました。
デバッグ用にログを吐かせてみましたが、SQLでは確かにIDとして"10000001″という値を
セットしています。
ところが、DBに保存されている値は"8388607″。
あれこれプログラムを弄ってみたんですが、状況は変わらず。。。
「こりゃ、DB定義を変えてテストしてみるしかないか」なんて思いながら、テーブル作成用のSQLを
見たところ、対象のカラムの定義に"unsigned"が含まれていないことに気づきました・・・。
念のため、{prefix}_usersテーブルを確認してみると、そちらには"unsigned"と書かれています。
もしやと思いながら、テーブル定義を変更してみたところ、不具合は無事に解消されました。
今まで、カラムの最大値を超えた値をセットしたSQLはエラーとなると思いこんでいたため、
エラーではなく、定義の最大値がDB保存されるという動作は想定外でした。

通常のXOOPSの運用の場合、1からauto_incrementで値がセットされていくので、IDが"8388607″を
超えることは無いと思いますが、ちょっとしたハマりどころになりそうなところです。
今後モジュールを作る際には、"unsigned"も忘れないようにしようと思います :razz:


RSS feed for comments on this post.

  1. gusagiさん、こんにちは。
    WizMobileではお世話になります。

    畑は違えど、メカ制御系でも良く符号付/なしでトラブることがあります。 インクリメントしないと分からないから、ある日突然、タッチパネルの表示が変になるんですよね。(笑)
    あと、昔あったのが1ワードデータのIntel方式とMotorolla方式で上位下位が逆になるやつ。。 今でもたまに遭遇すると、変換が大変です。(涙)

    Comment by naao — 2008年3月31日(月曜日) @ 12時15分33秒

  2. naaoさん、こんにちは。

    制御系は触れたことがないのですが、やはり色々な仕様があるのですね^^;
    「Intel方式とMotorolla方式で上位下位が逆」なんて、実際に知らないと対応も難しそうです。
    自分も、まだまだ知らないことだらけなので、これからも精進していきたいものです^^;

    Comment by gusagi — 2008年4月8日(火曜日) @ 14時31分06秒

Ȥ

ʤߥȤդ뤳ȤϽޤ

10 queries. 0.014 sec.
Powered by WordPress Module based on WordPress ME & WordPress

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.