我有一个invoice_lines
列line_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”开始的字符看起来不同,但插入这些行的代码用于数百万条其他类似查询可以找到的记录。
请告诉我为什么会这样?
如果您有什么可尝试的,请在评论部分询问我,我会告诉您结果
答案 0 :(得分:4)
评论太长了。
我的猜测是gzip.open(file_name, "rb")
不是它的样子。很难弄清楚实际问题。最可能的罪魁祸首是“伯顿”和“特伦特”之间的节奏:
那么,看看这些是否有效:
' On Trent'
否则可能是“O”。
(我想找到一种方法在答案中加入“Say for what for hopyards”这个词,但我想不出一个。)