我在对以 varchar(25) 格式保存的十六进制值使用 max 运算符时遇到问题。
数字是这样的:
0
1
0A
0F
FF
10A
现在如果我做这样的事情:
SELECT MAX(CONV(number, 16, 10)) as number FROM `numbers` WHERE 1
我得到 FF (255) 而不是我期望的 10A (266)
有什么问题?它有不同的长度吗?但是为什么它对 0 和 FF 有效呢?有提示就好了!
提前致谢。
最佳答案
来自文档:http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_conv
Converts numbers between different number bases. Returns a string representation of the number N, converted from base from_base to base to_base.
conv
的结果总是一个字符串。如果您的 to_base
是 10,它仍然会生成一个字符串,即使您认为它应该是一个数字是有意义的。
当 max
ing 一个 varchar 列时,mysql 可以做一些奇怪的事情,但我个人并不知道所有的细节。与B树有关。请参阅此资源。 http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html .奇怪的是那个页面上有关于这个问题的信息,但这就是原因。
关于十六进制字符串上的Mysql max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17786334/