背景信息:
- IBM Informix Dynamic Server版本12.10.FC14WE
- DB_LOCALE=et_EE.utf8
- 表有一个ID主键,没有索引
- 列数据类型lvarchar(-1(
表列的名称类似于";第一公司"第二公司"第三";。要查找名称匹配,正在使用UPPER函数。问题示例:
SELECT * FROM companies WHERE UPPER(name) LIKE 'FIRST%';
-未给出任何结果SELECT * FROM companies WHERE UPPER(name) LIKE 'SECOND%';
-给出预期结果(第二公司(SELECT * FROM companies WHERE name LIKE 'FIRST%';
-给出预期结果(第一家公司(SELECT * FROM companies WHERE UPPER(name) LIKE 'FIRST%' OR name LIKE 'FIRST%'
-未给出任何结果
是什么原因导致了这种行为,以及如何解决?也许同一数据库表中的条目在某些方面有所不同?
正如问题评论中所提到的,可能存在某种数据损坏,可以通过删除和重新创建有问题的条目来修复(更新没有效果(。由于这方面的系统相当复杂,并且涉及遗留技术,我们没有深入了解根本原因。出于其他一些需要和考虑,我们创建了一个单独的列,其中公司名称始终为大写,并调整了必要的选择查询,以在不使用UPPER
函数的情况下使用该查询。