oralce驱动使用的一些问题汇总

公司项目中使用mybatis 操作oracle数据库,使用过程中遇到几个问题,记录下,以便后面遇到相同问题知道怎么解决:

1、乱码问题

线上是oracle版本:Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64,编码:NLS_NCHAR_CHARACTERSET:AL16UTF16,NLS_CHARACTERSET:US7ASCII,ojdbc版本:ojdbc6,查询中文乱码,线上环境oralce编码不能改,所以只能另外想办法。了解到项目使用的是druid,可以通过编码转换,修改配置如下:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: oracle.jdbc.OracleDriver
    url: jdbc:wrap-jdbc:filters=encoding:jdbc:oracle:thin:@127.0.0.1:1521:ORCL
    username: xxxx
    password: xxxx
    druid:
      connection-properties: serverEncoding=ISO-8859-1;clientEncoding=GBK;serverTimezone=Asia/Shanghai

上线运行,乱码问题解决。

2、mybatis 中不能使用中文

mybatis的xlm中中文不能写中文,如:select * from user where name='张三',user表有张三但是就是查询不出来,换成select *  from user where name=#{name} ,传“张三”可以查到,怀疑是驱动版本过低,升级驱动到ojdbc8,结果乱码并且xml 中的中文仍然不能用,那是不是驱动太高了,降低驱动到ojdbc14,mybatis的xml中的中文能用了

3、日期类型查询时分秒都为0

换了ojdbc14后,乱码、xml中文查询不了的问题都解决了,又出现查询Date类型的时分秒都变成零,了解到不同的Oracle驱动在解析时可能有不同的处理方式,ojdbc14可能用的java.sql.Date接收日期参数,而java.sql.Date只保留日期部分,时间部分会被忽略,有一种解决方案就是在代码中添加:System.setProperty("oracle.jdbc.V8Compatible","true"),上线后日期能正常显示了。

最后总结:oracle使用各个版本对应驱动都不一样,要选择对应的驱动才行,否则会出现一系列的问题,还有就是oracle在创建时就要设定好编码,否则就可能会出现乱码问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值