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个字节)。
按照字符长度计算后,如果设定的是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