排除具有空二进制列数据的记录

hel*_*on3 5 mysql comparison binary-data

binary(16) not null在mysql表中有一列类型。并非所有记录在此列中都有数据,但是因为它设置为禁止NULL此类记录具有全零值。

我想从查询中排除这些全零记录。

到目前为止,我能找到的唯一解决方案是对HEX值进行比较:

SELECT uuid
FROM example
WHERE HEX(uuid) != '00000000000000000000000000000000'
Run Code Online (Sandbox Code Playgroud)

哪个有效,但是有更好的方法吗?

Boh*_*ian 5

binary使用文字匹配类型,请使用\0\1用于位。

在您使用 a 的情况下binary(16),这是仅排除零的方法:

where uuid != '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'
Run Code Online (Sandbox Code Playgroud)

请参阅SQLFiddle

使用与文字(像这样)进行简单比较的优点是可以使用列上的索引,而且速度要快得多。如果调用函数进行比较,将不会使用索引,并且必须在每一行上调用函数,这可能会导致大表的性能问题。