在使用 MyBatis 查询 Oracle 数据库时,如果表字段定义为 CHAR 类型,即使数据库中有数据,查询结果也可能返回 NULL。这是因为 CHAR 类型字段会使用空格填充至定义的长度。例如,如果 CHAR(10) 字段只存储了值 'abc',则数据库中实际存储的是 'abc ',后面用 7 个空格填充。

解决这个问题的方法是在 MyBatis 的 SQL 语句中使用 TRIM 函数去除字段值两端的空格。例如:

SELECT * FROM my_table WHERE TRIM(char_column) = #{charValue}

此外,还可以考虑将数据库表字段类型更改为 VARCHAR2,它存储的是字符串的实际长度,不会进行空格填充。