开发中我使用的是Oracle数据库,使用的是SpringBoot+注解版Mybatis。
在对数据库进行CURD操作时老是报java.sql.SQLException: ORA-00904:标识符无效
仔细检查了数据库表字段的映射,发现没问题,后来搞了好久才终于搞明白了:
Oracle查询字段区分大小写,于是我把SQL语句中要查询的字段都改为大写,并且就算你的Oracle数据库使用了注解版Mybatis映射字段,给字段取了别名,在sql查询时字段仍然要按照数据库中的字段来进行查询,而不是用别名进行查询。后来测试,OK。
顺便说一下,在使用注解版Mybatis的@Column字段映射时,映射名是不区分大小写的。比如你想要映射ID字段,可以这样写:@Column(name='id') 这样是完全可以映射数据库中的ID字段的
最后附上Oracle和Mysqol的对比:
MySQL
1、在Windows下,数据库名、表名、字段名不区分大小写。
2、大Linux/Unix下,数据库名、表名区分大小写,字段名不区分大小写。
3、编辑/etc/my.cnf,设置lower_case_table_names可以让MySQL是否区分表名的大小写。
0:区分大小写;
1:不区分大小写。
Oracle
1、在Oracle中,如果字段名称被双引号("")包裹,Oracle会区分大小写;
2、如果字段名称没有被双引号("")包裹,则全部转换成大写来执行。
3、如果表结构设计时,字段名称使用了数据库的保留字,SQL中的字段名称必须用双引号("")包裹,以避免SQL语句执行出错。不建议用数据库的保留字来做表名和字段名。