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

时间:2016-03-08 20:13:52

标签: mysql comparison binary-data

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

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

到目前为止,我能找到的唯一解决方案是HEX该值并将其与之比较:

SELECT uuid
FROM example
WHERE HEX(uuid) != '00000000000000000000000000000000'

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

3 个答案:

答案 0 :(得分:3)

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

对于binary(16)的情况,这是如何仅排除零:

where uuid != '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'

请参阅SQLFiddle

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

答案 1 :(得分:2)

SELECT uuid FROM example WHERE TRIM('\0' FROM uuid)!='';

请注意波希米亚人的答案很简洁,我只是在我不确定场地的长度时使用它(这可能归结为某种程度上糟糕的设计,随时教育我)。

答案 2 :(得分:0)

select uuid from example where uuid!=cast('' as binary(N));

其中N是UUID列的长度。不漂亮,但工作。

相关问题