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

Exclude records with empty binary column data

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

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

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

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

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

要使用文字匹配 binary 类型,请使用 [=12=]</code> 作为位。</p> <p>在您使用 <code>binary(16) 的情况下,这是仅排除零的方法:

where uuid != '[=10=][=10=][=10=][=10=][=10=][=10=][=10=][=10=][=10=][=10=][=10=][=10=][=10=][=10=][=10=][=10=]'

参见 SQLFiddle

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

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

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

SELECT uuid FROM example WHERE TRIM('[=10=]' FROM uuid)!='';

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