问题描述
背景信息:
- 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
函数的查询。