Informix DB LIKE查询中的UPPER和LOWER函数不适用于表中的所有条目

问题描述

背景信息:

  • 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函数的查询。