在达梦数据库中参数IFUN_DATETIME_MODE含义是:
The definition of DATETIME in sys function, 0:DATATIME(6), 1:DATATIME(9)
近期某项目组发现DM8 1.2.128版本和DM8 1.2.192版本中IFUN_DATETIME_MODE参数默认值不一样,根据要求需要将DM8 1.2.128版本升级至DM8 1.2.192版本,那相关DATETIME字段的数据是否受影响呢?
下面开始测试验证:
在Dm8 1.2.128参数IFUN_DATETIME_MODE默认值为1.
创建表t01,如字段DATETIME精度为9,直接创建失败。将字段值精度设置6,创建成功。插入精度为9的数值,插入成功,但是查询只是显示了6个精度值。
查询t01表,和服务端查询结果一致,只是显示6位精度。
修改参数IFUN_DATETIME_MODE值为0,重启库继续测试。
创建表t02,定义同t01一致,如字段DATETIME精度为9,直接创建失败。将字段值精度设置6,创建成功。插入精度为9的数值,插入成功,但是查询只是显示了6个精度值。
在客户端无法查看t02表数据。
在Dm8 1.2.192 版本该参数默认值为0.
服务端创建表create table t01(a1 DATETIME(9));,插入精度9位数值并查询,发现精度只是正确显示到6位,7-9精度的值显示为0。
客户端查询t01表,发现精度也是正确显示到6位,7-9精度的值显示为0:
将参数IFUN_DATETIME_MODE值改为1,并重启数据库继续测试。
再次在服务端查询t01表,发现精度也是正确显示到6位,7-9精度的值显示为0:
客户端再次查询表t01,发现精度也是正确显示到6位,7-9精度的值显示为0:
在服务端新创建t02表,定义同t01一致,并且是插入同样的数值。查询t02表,发现精度正确显示到9位。
查询t02表,发现精度正确显示到9位。
根据上面测试结果整理如下表格:
该参数值默认为1,但是也只能创建DATETIME类型字段精度为6的表。只有该值为1时,服务端和客户端都显示一致,显示到精度为6位数。
该参数值默认为0,能创建DATETIME类型字段精度为9的表,服务端和客户端查询都显示到9位精度,但是7-9位精度值为0。将该参数值改为1,服务端和客户端都能查询到9位精度,而且精度7-9也显示正确的数值。
也就是说如果128版本这个参数值为1,192版本无论这参数值是0还是1都兼容128版本之前的数据,应用不会报错。
文章
阅读量
获赞