xcftg
#1
【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】all-in-one 4.3.5_bp2_20250515
【问题描述】在数据库表中定义datetime(6)类型的字段,通过ODC查看能够展示秒后6位精度,通过java程序的2.4.14oceanbase-client驱动获取该字段,string类型接收,后面位数据精度会丢失或忽略0截断,想请问是转字符时默认丢弃精度了吗?换成mysql8.0.19版本的驱动后无此问题。
请问升级oceanbase驱动版本能解决此问题吗?具体升级到哪个版本?
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
论坛小助手
#3
用户问题总结:在 OceanBase 数据库中定义了 datetime(6)
类型字段,通过 ODC 查看可以展示秒后 6 位精度,但使用 Java 程序和 oceanbase-client 驱动(版本 2.4.14)获取该字段时,精度会丢失或忽略尾部的零进行截断。更换为 MySQL 8.0.19 版本驱动后无此问题。
在这种情况下,obdiag
工具可能无法直接解决精度丢失的问题,因为这更可能是驱动程序的行为或配置问题,而不是数据库本身的运行状态问题。不过,我们可以通过日志采集来确认驱动与数据库交互的具体情况。
日志采集场景和命令
日志采集场景: SQL 执行出错
日志采集命令: obdiag gather scene run --scene=observer.sql_err --env “{db_connect=’-h<您的IP> -P<端口> -u<用户名>@<租户名> -p<密码> -D<数据库名>’, trace_id=’<trace_id>’}”
解释: 上述命令可以帮助我们收集 SQL 执行过程中相关的日志信息,以便进一步分析是否存在驱动与数据库交互中的异常行为。请将 <您的IP>
、<端口>
、<用户名>
、<租户名>
、<密码>
、<数据库名>
和 <trace_id>
替换为实际值。
为了更好地帮助您,请提供以下信息:
- 您当前使用的 OceanBase 数据库版本是什么?
- 您是否尝试过升级到更高版本的 OceanBase 客户端驱动?如果尝试过,请说明具体版本。
- 在 Java 程序中,您是如何配置日期时间格式的?是否有自定义的格式化器或解析器?
- 您能否提供一个简单的代码示例,展示如何从 Java 程序中读取
datetime(6)
字段?
- 是否有可能提供包含
datetime(6)
字段的表结构以及插入数据的 SQL 示例?
最后,如果您能运行上述日志采集命令并将生成的日志压缩包提供给我们,将有助于进一步诊断问题。
附上敏捷诊断工具 obdiag 使用帮助链接
可以试着用
getTimestamp()接口代替 getString()