postgresql 错误,查询找不到具有完全相同字符串的行

postgresql bug, query can't find the row with exact same string

我有一个 table invoice_linesline_description 列(文本,utf8)。这些行由 PHP 代码 (utf8) 插入。最近我发现了以下问题:

当我运行

SELECT * FROM invoice_lines
WHERE line_description ilike '%1 X Hired 1100 (LTR). Derby Road, Burton _________%'

SELECT * FROM invoice_lines
WHERE line_description ilike '%1 X Hired 1100 (LTR). Derby Road, Burton %'

postgres returns 81 行 line_description 喜欢“1 X Hired 1100 (LTR). Derby Road, Burton On Trent, Staffordshire - 4 天 @ £2.95 per week (05/08/2015 - 08/08/2015)。等级:混合城市垃圾”(日期从 2015 年到 2016 年)

但是当我运行这个:

SELECT * FROM invoice_lines
WHERE line_description ilike '%1 X Hired 1100 (LTR). Derby Road, Burton On Trent%'

SELECT * FROM invoice_lines
WHERE line_description ilike '%1 X Hired 1100 (LTR). Derby Road, Burton O%'

postgres returns 0 行.

当我尝试只获取 1 行具有精确值时,它也 returns 0:

SELECT * FROM invoice_lines
WHERE line_description = '1 X Hired 1100 (LTR). Derby Road, Burton On Trent, Staffordshire - 4 days @ £2.95 per week (05/08/2015 - 08/08/2015). Grade: Mixed Municipal Waste'

看起来从 "On Trent, Staffordshire" 开始的字符不同,但插入这些行的代码用于类似查询可以找到的数百万条其他记录。

你能告诉我为什么会这样吗?

如果你有什么想尝试的,请在评论区问我,我会告诉你结果

我的猜测是 ' On Trent' 不是它看起来的样子。很难找出实际问题。最有可能的罪魁祸首是“伯顿”和“特伦特”之间的步伐:

所以,看看这些是否有效:

WHERE line_description ilike '%1 X Hired 1100 (LTR). Derby Road, Burton_O%'
WHERE line_description ilike '%1 X Hired 1100 (LTR). Derby Road, Burton%O%'

否则可能是“O”。