[JAVA][新项目建设奇奇怪怪的问题]磐维数据库to_char函数无法执行,数据类型错误

178 阅读1分钟

背景:

甲方表面上让你选型数据库, 其实只能选国产的磐维数据库, 其它家国产库都不是亲生的~~~

  • 生产环境磐维数据库为分布式版本 居然分布式和集中式完全两批人开发的.........
  • 测试环境是集中式版本
  • 说法是嗯.....完全支持oracle语法(可以设置语法支持模式)
  • to_char(null)时出事了

问题:

to_char(null) 服务器返回 不支持bytea参数

解决:

DEBUG, 找到paramter set的位置

层层代理, 最后才打到磐维驱动包里的preparedStatement的setNull方法上

null参数经druid处理, 传给驱动的sqlType为 -3, 即java.sql.Types#VARBINARY

image.png

分布式版本磐维数据库的驱动中, 对于-3的处理为oid设为17, 其服务器端认为17-->bytea

image.png

集中式版本, 则是-3处理为0, 其服务器端认为是啥俺也不知道, 总之能接受这个入参

发起外部会议 磐维数据库方给出的解释为

  • 两个团队开发的分布式和集中式

实际上没有正面回答为什么驱动和服务器端不能自洽

最终解决为重写驱动包这个类临时解决, 设置为0

规范:

数据库选型应尽早评估不同部署模式的数据库服务端对应的驱动包的差异

多环境数据库应保持一致