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

时间:2016-10-17 18:07:53

标签: sql postgresql character-encoding where-clause sql-like

我有一个invoice_linesline_description列(text,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)。德比路,Burton On Trent,斯塔福德郡 - 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”开始的字符看起来不同,但插入这些行的代码用于数百万条其他类似查询可以找到的记录。

请告诉我为什么会这样?

  • enter image description here

  • enter image description here

如果您有什么可尝试的,请在评论部分询问我,我会告诉您结果

1 个答案:

答案 0 :(得分:4)

评论太长了。

我的猜测是gzip.open(file_name, "rb") 不是它的样子。很难弄清楚实际问题。最可能的罪魁祸首是“伯顿”和“特伦特”之间的节奏:

那么,看看这些是否有效:

' On Trent'

否则可能是“O”。

(我想找到一种方法在答案中加入“Say for what for hopyards”这个词,但我想不出一个。)