我有一个表invoice_lines
,其中包含line_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 返回 81 行,其中包含 line_description
,例如“1 X Hired 1100 (LTR)。Derby Road, Burton On Trent, Staffordshire - 4 天,每周 2.95 英镑 (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 返回0 行。
当我尝试仅获取具有精确值的 1 行时,它也返回 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”
并不是它看起来的样子。很难弄清楚真正的问题。最有可能的罪魁祸首是“Burton”和“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”。
关于sql - postgresql bug,查询找不到具有完全相同字符串的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40092945/