我在mysql表中有一个类型为binary(16) not null
的列。并非所有记录都包含此列中的数据,但因为它设置为禁止NULL
此类记录具有全零值。
我想从查询中排除这些全零记录。
到目前为止,我能找到的唯一解决方案是HEX
该值并将其与之比较:
SELECT uuid
FROM example
WHERE HEX(uuid) != '00000000000000000000000000000000'
哪个有效,但还有更好的方法吗?
答案 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列的长度。不漂亮,但工作。