查询binary类型字段返回空集的原因及获取目标结果的方法
问题分析与解决方案
为什么查询返回空集?
核心原因是binary类型的严格字节匹配规则:
- binary类型字段是按原始字节存储数据的,比较时会严格校验字节长度和每个字节的内容是否完全一致。
- 假设你的
sequence字段定义为binary(n)(n大于1),当插入值'2'时,数据库会自动用空格(ASCII码0x20)填充到指定长度n。比如如果n是20,存储的就是'2'加上19个空格的二进制字节数据。 - 而你查询时写的
sequence = '2',数据库会把字符串'2'转换为1字节的binary值(仅包含'2'的ASCII码0x32),和存储的n字节数据在长度、内容上都不匹配,所以返回空集。
如何正确查询到目标结果?
你可以用以下几种方法解决:
方法1:将字段转换为字符串后比较
把binary类型的sequence字段转换为字符串,这样会自动忽略填充的空格,直接匹配内容:
SELECT * FROM malwareTable WHERE CAST(sequence AS CHAR) = '2';
方法2:使用二进制字面量精确匹配
如果想直接匹配原始字节,可以用目标字符的ASCII二进制值('2'的ASCII码是0x32):
SELECT * FROM malwareTable WHERE sequence = 0x32;
方法3:适配字段长度的binary转换
如果明确字段的定义长度,也可以把查询值转换为对应长度的binary(比如字段是binary(20),就补空格到20位),不过这种方法不够灵活:
SELECT * FROM malwareTable WHERE sequence = BINARY '2 ';
内容的提问来源于stack exchange,提问作者QuestionAsker123
相关产品推荐
相关产品推荐

