人大金仓数据库的客户端工具中自带有数据库迁移工具。下一步,我们需要将Joomla使用的mysql数据库中的数据表和数据全部迁移到人大金仓中。
迁移数据
人大金仓的数据库迁移工具是有图形界面的。首先需要新建两个数据库的链接。一个是需要迁移的mysql数据库的链接。另外一个是目标数据库人大金仓的链接。在初次迁移的时候肯定会出现很多的错误,在多次尝试后最终完成了整个数据库的迁移,其中的艰辛可谓一言难尽。在此将一些踩过的坑记录一下,希望能帮助后来者。
下图是迁移数据成功后的截图:
如何设置数据库参数
要设置人大金仓的数据库参数,需要有如下步骤:
- 在终端中切换到一个特定的用户,这个用户在安装数据库的时候执行。在我的测试环境中这个用户是kingbase.
- 执行命令 ksql -h 192.168.2.241 -p 54321 -U SYSTEM -W 123456 -d TEST 进入到数据库的管理界面。
- 为了方便兼容mysql,需要对数据库进行一些设置。
- 每次修改参数,都应该执行一次重载系统参数
设置系统参数:
alter system set ignore_char_null_check=on; //其中ignore_char_null_check 是参数名, on是参数值
查看系统参数:
show case_sensitive;//其中case_sensitve是参数名
重新加载设置:
在数据库终端执行命令: select sys_reload_conf();
执行成功的结果:
sys_reload_conf ----------------- t (1 row)
大小写敏感的问题
大小写敏感的设置,直接关系到后续迁移的成败。依据我个人的经验,在初始化人大金仓数据库的时候务必将大小写敏感设置为否。如果你初始化的时候设置为大小写敏感,建议直接重装人大金仓数据库。大小写敏感的问题不单单人大金仓有,达梦数据库也有同样的问题。
更多关于人大金仓大小写敏感的问题,请参考文章:KingBaseV8人大金仓数据库 | 大小写敏感问题
tinyint的问题
人大金仓在迁移mysql的时候,如果发现数据表字段的类型为tinyint(1)的时候会自动的转换为bool类型,将原先的数值0,1使用true,false替换。这在joomla中将导致严重的问题。因为很多底层的查询语句直接是使用“1”来判断的,最明显的一个是published字段。
解决的方案有两种
- 在迁移前将mysql字段类型调整为smallint。
- 在创建mysql数据库链接的时候,增加一个参数设置。将tinyInt1isBit设置为false.如图:
relation "PRIMARY"already exists 创建数据库对象失败的问题
解决的方法就是勾选"自动转换对象名"。如图:
0000-00-00 00:00:00 日期转换问题
人大金仓的数据库中0000-00-00 00:00:00为非法时间会使用Null代替,这样当插入记录中有0000-00-00 00:00:00,且该字段为Not Null的时候会导致插入失败,提示非空约束。典型的错误信息如下:
CST ERROR: null value in column "checked_out_time" violates not-null constraint
解决方法有两种:
- 修改相应的字段类型,移除掉非空约束
- 在创建mysql数据库链接的时候,增加一个参数设置。将zeroDateTimeBehavior设置为round.如图:
这样设置之后所有的0000-00-00 00:00:00 会转换为 0001-01-01 00:00:00.0。
保留关键词的问题
在适配的过程中发现提示如下的错误信息:CONNECT BY clause required in this query block 。经过分析,发现查询字段中有level字段,这个字段是被人大金仓保留的。
解决方案:
设置数据库参数:exclude_reserved_words='level';如果有多个参数,可以使用逗号分隔。
update inner join的问题
在Joomla实现排序的时候,使用了update inner join这种语法,在人大金仓中是不被支持。
解决的方案:
修改人大金仓数据库查询类,对update inner join这种语句进行拦截,然后做对应的替换。目前我只想到了此类方法。
case when的问题
在迁移成功后,打开文章详情的时候出现如下的错误:
解决的方案:
显示的转换类型,将c.id 转为c.id::text
更多的关于问题
更多的问题请参考:人大金仓数据库 与 mysql 的 sql 差异对比 与 导入数据
评论 (0)