1

varchar(25) 形式で保存された 16 進数値で max 演算子を使用すると問題が発生します。

数値は次のようになります。

0
1
0A
0F
FF
10A

今、私がこのようなことをすると:

SELECT MAX(CONV(number, 16, 10)) as number FROM `numbers` WHERE 1

予想される 10A (266) ではなく、FF (255) を取得します。

どうしたの?長さが違うのでしょうか?しかし、なぜ0とFFで機能するのでしょうか? ヒントは素晴らしいでしょう!

前もって感謝します。

4

1 に答える 1

1

ドキュメントから: http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_conv

異なる基数間で数値を変換します。基数 from_base から基数 to_base に変換された数値 N の文字列表現を返します。

の結果convは常に文字列です。あなたto_baseが 10 の場合、数字であることが理にかなっているはずだと思っていても、結果は文字列になります。

varchar 列を ing するときmax、mysql はいくつかの奇妙なことを行うことができますが、私は個人的にすべての詳細を知りません。Bツリーと関係があります。このリソースを参照してください。http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html . そのページにこの問題に関する情報があるのは奇妙ですが、それが原因です。

于 2013-07-22T19:45:47.860 に答える