mysql导入达梦数据库注意事项

1、插入数据

如果插入数据需要插入主键Id,需要关闭主键约束检测。

-- 将IDENTITY_INSERT 设置为ON
set IDENTITY_INSERT 表名 ON;
 
-- 执行insert语句 注意:表名后面必须标注字段 不然依旧会报错
insert into 表名(字段1,字段2,字段3) values (值1,值2,值3);
 
-- 将IDENTITY_INSERT 设置为OFF
set IDENTITY_INSERT 表名 OFF;

注意insert into 表名必须指定字段,否则一样报错,太特么的麻烦了这个数据库。

2、列长度超出定义的解决办法。

比如mysql定义的varchar(50),可以保存50字符。

但是达梦数据库的默认值并不是这样,他默认是按照字节长度计算的,所以同样是设定varchar(1000),在代码里截取1000个字符可能会存不进去,因为中文需要占用2(GBK)或3个(UTF8)字节,这就导致代码里的1000个字符没办法存到数据库中。
按照字符长度计算后,如果设定的是GBK编码达梦会自动留2倍长度,UTF8会自动留4倍长度(UTF8支持表情、占4个字节)。
可以通过查询语句确认VARCHAR 类型对象的长度是否以字符为单位。
SELECT NAME,VALUE   
FROM V$PARAMETER   
WHERE NAME = 'LENGTH_IN_CHAR';

1:是,设置为以字符为单位时,定义长度并非真正按照字符长度调整,而是将存储长度值按照理论字符长度进行放大。

所以会出现实际可插入字符数超过定义长度的情况,这种情况也是允许的。

同时,存储的字节长度 8188(达梦varchar的最大长度限制)上限仍然不变,也就是说,即使定义列长度为8188 字符,其实际能插入的字符串占用总字节长度仍然不能超过 8188;

0:否,所有 VARCHAR 类型对象的长度以字节为单位
解决办法:无法修改这个参数,达梦v8初始数据库时候也没有这个参数设置,只能在导入数据时候设置长度,utf8编码x3,gbk编码x2

 

posted @ 2024-11-01 09:40  鹅是码农  阅读(25)  评论(0编辑  收藏  举报