在使用 MyBatis 查询 Oracle 数据库时,如果数据库表字段定义为 CHAR 类型,即使数据库中有对应数据,查询结果也可能返回 null。

出现这种情况的原因是 CHAR 类型字段在数据库中会固定占用指定长度的空间,如果存储的值长度不足,数据库会自动用空格填充。而在 Java 代码中,通常使用字符串类型来接收查询结果,字符串默认会去除末尾的空格,导致查询结果与数据库中的实际值不匹配。

解决这个问题的方法是在 MyBatis 的 SQL 语句中使用 TRIM() 函数去除 CHAR 类型字段末尾的空格,或者在 Java 代码中将查询结果转换为 CHAR 类型。

例如,假设数据库中有一个名为 user 的表,其中包含一个名为 name 的 CHAR(10) 类型的字段。如果要查询 name 字段值为 user1 的记录,可以使用以下 SQL 语句:

SELECT * FROM user WHERE TRIM(name) = 'user1' 

或者在 Java 代码中使用以下方式处理查询结果:

String name = (String) resultSet.getString("name");
if (name != null) {
    name = name.trim();
}