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

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

我有一个表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”开头的字符不同,但插入这些行的代码用于可通过类似查询找到的数百万条其他记录。

请问您能告诉我为什么会发生这种情况吗?

  • enter image description here

  • enter image description here

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

最佳答案

我的猜测是“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/

相关文章:

mysql - 单个查询而不是多个 select 语句

sql - PostgreSQL 总和类型转换为 bigint

java - 数据库和 JPA 中不同的 PostgreSQL 序列 ID

python - 如何将问号而不是文本转换为西里尔字母?

java - Android:NoClassDefFoundError:java.nio.charset.StandardCharsets 在 SDK 18 上发送电子邮件

mysql - 忽略 MySQL 警告消息有什么影响?

mysql - mysql 例程的大小\长度有区别吗?

java - 如何通过 JDBC 从 Postgresql-DB 进行备份?

sql - 创建表,其中每一列都是从选择查询中检索到的不同值

jquery - 如何显示原始的原始Html代码?