(本文档仅供参考)
...
问题说明
1、知识库A使用gbk编码创建的数据库。
...
3、通过smartbi1管理端把知识库A进行备份,然后在知识库B对应的smartbi2进行知识库还原。有时候会发生插入数据错误,sql中要更新的某个字段的长度超过了数据库表中字段的定义长度。
解决方案
原因分析: 原因分析:
1、数据库以字节为单位存储。1、数据库以字节为单位存储。
2、以知识库t 2、以知识库t_group中某个字段A为例,如果g_group 设置的是varchar 255。
3、知识库A 3、知识库A gbk 编码情况下,可以存储255/2 大约127个汉字。
4、知识库B 4、知识库B utf-8编码情况下,可以存储255/3 大约85个汉字。
这样如果 这样如果 知识库中某些字段超过了85个汉字,在插入到utf-8 编码的数据库中就会遇到上面出现的问题。
如何判断字节存储是否一样?
目前在项目是在db2目前在项目是在db2_9上遇到的,发现低版本的mysql(4.0以下),也会有这个以字节为单位存储,然后才会触发此问题,其他数据库未测试,如果遇到同样的问题,可以通过如下方式对应的【字节】存储的是否一样:
1) 1) 对知识库A创建一个测试表,表中包含一个vachar类型的字段,设置为vachar(10),创建后,输入中文,看能输入几个中文字:
2)对知识库B同样创建一个测试表,表中包含一个vachar类型的字段,设置为vachar 2)对知识库B同样创建一个测试表,表中包含一个vachar类型的字段,设置为vachar(10),创建后,输入中文,看能输入几个中文字:
3)检查两个数据库插入的中文个数是否一样,如果一样(如下图),说明两个数据库字节存储是一样的,如果不一样,说明字节存储是不一样的。 3)检查两个数据库插入的中文个数是否一样,如果一样(如下图),说明两个数据库字节存储是一样的,如果不一样,说明字节存储是不一样的。
解决方案:
保证两个知识库的数据库存储字节一样,因为这类数据库自身的字节存储问题,是没有办法从产品层面解决的。
...