排除具有空二进制列数据的记录
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)!='';
请注意波西米亚人的答案更简洁,我只是在不确定字段的长度时使用它(这可能在某种程度上归结为糟糕的设计,请随时教育我)。
我在 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)!='';
请注意波西米亚人的答案更简洁,我只是在不确定字段的长度时使用它(这可能在某种程度上归结为糟糕的设计,请随时教育我)。