我正在转换一个表,该表有一个存储整数的列作为十六进制字符串。我想将这些字符串转换为整数,因为它们占用的空间更少,更容易查询。但是,似乎MySQL缺乏从BINARY转换为INT的有效方法。
这有效:
SELECT CAST(CONV(some_column, 16, -10) AS SIGNED);
-- some_column = "49858170ef9a4f63"
...但它首先转换为十进制字符串,这不太理想。我想直接转换为整数,绕过字符串:
SELECT CONVERT(UNHEX(some_column), SIGNED);
-- some_column = "49858170ef9a4f63"
......但它不起作用;我总是得到0.它似乎与CAST做同样的事情。
如何将BINARY值直接转换为INT,而不先将其转换为字符串?从更抽象的意义上讲,如何在不更改基础数据的情况下更改值的类型?
请注意,这纯粹是MySQL;我没有使用PHP或任何其他脚本语言。
答案 0 :(得分:0)
如果没有创建自己的STORED FUNCTION
,我就不会认为您可以先避免转换为字符串。
我猜UNHEX不起作用,因为(至少MySQL官方的例子建议),HEX / UNHEX将字符串/十进制字节转换成十六进制字符表示,而你的十六进制字符串可能是& #39; 0X ???'格式,CONVERT将更改为' 0'。
鉴于CONV
必须解析字符串,我怀疑将它转换为十进制字符串确实需要额外的开销。
答案 1 :(得分:0)
至INT
conv(substr(hex(segment), -8)
致ip addr
SELECT INET_NTOA(conv(substr(hex(segment), -8), 16, 10))
祝你好运。