当前位置: 首页 > news >正文

mysql 时间精度问题

timestamp到2038年,还有14年时间,一个系统如果能活到那一刻也是相当不错了。
这里先看一下个datetime的问题,下面的插入数据的时间戳是2024-03-06 21:20:50.839

INSERT INTO psi_io_balance ( id, as_id, bill_date, order_id, busi_type, direction, customer_id, ca_name, warehouse_id, stock_id, out_count, out_unit_cost, out_cost, final_count, final_unit_cost, final_cost, create_time, sn ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
==> Parameters: f0ad530bcd234a57bf11282e7900c0fe(String), 7(Integer), 2024-01-09 00:00:00.0(Timestamp), XSCKD202401090001(String), 03(String), 02(String), 557511(Integer), 工作室(String), 43ebf6d3ed024d738b3c788aea27ec1f(String), 538(Integer), 1(BigDecimal), 0.01000000(BigDecimal), 0.01(BigDecimal), 9.00000000(BigDecimal), 0.01000000(BigDecimal), 0.09(BigDecimal), 2024-03-06 21:20:50.839(Timestamp), 0(Integer)

因为系统设计,你可以任意选择时间插入,插入后将实时进行成本核算,于是就发生了向后面的数据作用。下面的create_time 应该大于2024-03-06 21:20:50.839,但因为数据库字段为datetime,因此自身也被查询数来了,可以看到2024-03-06 21:20:51 这个字段到秒,后面的毫秒被丢失

SELECT id,as_id,bill_date,order_id,busi_type,direction,vendor_id,customer_id,ca_name,warehouse_id,stock_id,in_count,in_unit_cost,in_cost,out_count,out_unit_cost,out_cost,final_count,final_unit_cost,final_cost,residue_count,end_flag,update_time,create_time,version,sn FROM psi_io_balance WHERE (bill_date = ? AND create_time > ? AND as_id = ? AND stock_id = ? AND warehouse_id = ?)
==> Parameters: 2024-01-09 00:00:00.0(Timestamp), 2024-03-06 21:20:50.839(Timestamp), 7(Integer), 538(Integer), 43ebf6d3ed024d738b3c788aea27ec1f(String)
<==    Columns: id, as_id, bill_date, order_id, busi_type, direction, vendor_id, customer_id, ca_name, warehouse_id, stock_id, in_count, in_unit_cost, in_cost, out_count, out_unit_cost, out_cost, final_count, final_unit_cost, final_cost, residue_count, end_flag, update_time, create_time, version, sn
<==        Row: f0ad530bcd234a57bf11282e7900c0fe, 7, 2024-01-09, XSCKD202401090001, 03, 02, null, 557511, 工作室, 43ebf6d3ed024d738b3c788aea27ec1f, 538, 0E-8, 0E-8, 0.00, 1.00000000, 0.01000000, 0.01, 9.00000000, 0.01000000, 0.09, 0E-8, 0, null, 2024-03-06 21:20:51, null, 0

mysql 5.6.4 之前数据库是会把datetime类型秒后面的精度丢掉,5.6.4之后的版本是会保留这个精度
因此需要修改数据库表

ALTER TABLE `psi`.`psi_io_balance` 
MODIFY COLUMN `create_time` datetime(3) NOT NULL COMMENT '创建时间' AFTER `update_time`;

这样查看数据库,字段就到毫秒了。一般可能用不到,但特定场景时间精确起到了关键作用
1

http://www.lryc.cn/news/312378.html

相关文章:

  • 基于python的爬虫原理和管理系统实现(代码下载)
  • IOS 设置UIViewController为背景半透明浮层弹窗,查看富文本图片详情
  • 网络层介绍
  • springboot/ssm酒店客房管理系统Java在线酒店预约预定平台web
  • 分布式测试插件 pytest-xdist 使用详解
  • 【S32K3 MCAL配置】-1.1-GPIO配置及其应用-点亮LED灯(基于MCAL)
  • 【软件工程】软件工程定义、软件危机以及软件生命周期
  • 24计算机考研深大经验分享(计算机专业考研综合安排)
  • 【知识整理】MySQL数据库开发设计规范
  • Vue自定义组件实现v-model
  • 【Linux】Linux网络故障排查与解决指南
  • 跟着cherno手搓游戏引擎【27】升级2DRenderer(添加旋转)
  • 中医舌苔笔记
  • Facebook的社交未来:元宇宙时代的数字共融
  • 2024护网面试题精选(一)
  • 如何制作一个简单html网页
  • React富文本编辑器开发(七)接口与辅助函数
  • 【conda】conda卸载并重新安装指定版本软件package
  • 项目设计方案规范参考
  • LVS----DR模式
  • 操作系统(笔记)(一)
  • Redis线程模型解析
  • ros2 launch如何控制node的启动顺序
  • Android13 framework层添加关机接口
  • GDB调试入门笔记
  • JavaScript的`call`方法:实现函数间的调用!
  • qt5-入门-使用拖动方式创建Dialog
  • 【Redis】RedisTemplate和StringRedisTemplate的区别
  • 面试经典150题(101-104)
  • Java实现读取转码写入ES构建检索PDF等文档全栈流程