アプリ版:「スタンプのみでお礼する」機能のリリースについて

SELECT MAX文で、フィールドの最大値を出しています。

これまで、何の問題もなく動作していたのですが、フィールドの数値が9999を超えたとたん、10000、10001などの数値があっても常に9999を最大値として返してくるようになりました。

どうしてでしょうか?

【説明】
A. 例文は次のようなものです。
SELECT MAX(`idc`) from testinvoice;

B. `idc`は長さ13のVARCHERです。整数がLatin1で収納されています。

C. `idc`に収納されているデータは、1580からはじまって、9998、9999、10000、10001まで続く約8500件の連番(整数)です。

D. これまで何年も問題なく最大値を出してきました。

とても不思議です。

A 回答 (1件)

カラムの型がVARCHERだからです。



VARCHERは文字列型なので、データを数値ではなく文字列として検索しMAXを探しています。
文字列比較は左側の文字から順番に1文字ずつ比較しますので、1と9では9の方が大きいと判断されます。
従って、9999 と 10001 では 9999 の方が大きいと判断されます。
    • good
    • 0
この回答へのお礼

ご丁寧に教えていただき、ありがとうございます。

お礼日時:2013/07/05 18:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!