我有一个名为table_1的MySQL表,该表具有类型为col_1的名为TEXT的列。我正在尝试使用此语句查询具有特定值的行,但未返回任何数据。

SELECT * FROM table _1 WHERE col_1 = '1325'

但是,当我使用此语句时,我确实获得了数据。

SELECT * FROM table_1 WHERE col_1 LIKE '%1325%'

如何获得第一条陈述?

最佳答案

如果带有WHERE col_1 LIKE '%1325%'的选择带回一个看起来像1325的值,但是WHERE col_1 = '1325'不?

那可能是因为看不见的字符。

例如,如果col_1的值为“ 1325”。
由于存在额外的空间,该值不等于“ 1325”。
但是它确实包含'1325',因此喜欢的人会找到它。
不注意到不可见的内容很容易。

您可以做的是TRIM值,以便在与=比较之前删除空格。

SELECT * FROM table_1 WHERE TRIM(col_1) = '1325';


请注意,默认的TRIM或RTRIM仅删除空格。
为了使它适用于其他空白字符,SQL会变得更长一些。

SELECT * FROM table_1
WHERE TRIM(Replace(Replace(Replace(col_1,'\t',''),'\n',''),'\r','')) = '1325';


而且,如果您想获得视觉证据,这是否是由不可见的空格引起的?
然后使用LIKE,并在列的开头和结尾使用CONCAT。然后,在结果中将很容易注意到空格。

select CONCAT('[',col_1,']') AS Test, t.* from table_1 t where col_1 like '%1325%';


您可以here对其进行测试

10-08 14:39