数据库迁移,关于mysql迁移到vastbase库的几个常见问题

数据迁移工具我用的是Navicat Premium1.5,其他工具不知道有没有类似的问题。

1、反斜杠数据迁移失败

字段内容里带有未转义的反斜杠的数据会迁移失败,我们需要把它变为双斜杠,如第二行。

数据量多的话用update语句统一修改:

UPDATE 表名 SET `字段名`='\\\\' WHERE `字段名`='\\';

2、默认值未同步

迁移后我们发现所有数据的默认值都不存在了,一个个改太麻烦,我们可以在mysql里用sql语句查询到所有字段的默认值,顺便用concat函数拼接成vastbase的sql语句,直接复制过去执行就行。

 SELECT
concat('ALTER TABLE \"',TABLE_NAME , '\" alter column  \"',COLUMN_NAME,'\" set DEFAULT ',IF(COLUMN_DEFAULT='','\'\'',COLUMN_DEFAULT),';')
FROM
information_schema.columns
WHERE
TABLE_SCHEMA = 'test_table' 
AND COLUMN_DEFAULT is not null; 

复制这里的语句直接在新库执行,非常方便。

注意:vastbase的sql语句中,表名和字段名一定要用双引号包裹起来!!!

如果表名或者字段名是关键字、或者有驼峰的形式,可能会修改失败!

*注意:这里有个很重要的问题,数据迁移后主键没有继承自增属性!

这个是Navicat工具mysql的表设计界面,这里有个选项可以看到主键是否是自增的

这个是Navicat打开vastbase表设计的界面,发现我们看不出主键直接有自增属性

通过询问专业人员,自增属性就是给主键一个"AUTO_INCREMENT"的默认值,也就是这样:

于是,我们在mysql库里查出所有的自增主键,拼接成sql,然后统一修改:

SELECT
concat('ALTER TABLE \"',TABLE_NAME , '\" modify \"',COLUMN_NAME,'\" ',DATA_TYPE,' AUTO_INCREMENT;')
FROM
information_schema.columns
WHERE
TABLE_SCHEMA = 'test_table' 
AND EXTRA = 'auto_increment';

这个sql是他提供的方案,修改默认值的方法应该也可以

3、数据格式问题

3.1、bool值查询问题(这个不知道什么时候兼容了,现在好像没有这个问题)

我们知道在mysql里不存在bool类型的值,一般是以tinyint类型存储的,但我们可以用字段名=true/false来查询,mysql会自动把true转为1,false转为0

但是在vastbase库里,tinyint类型迁移后对应的是int2类型,我们直接用bool值查询会报错

如果我们代码里对应的实体类是bool类型,那么查询,插入等操作都可能会失败,它不会把bool值转为数值类型,需要把bool类型的实体类转为int类型或者将数据库字段修改为bool类型,sql语句如下:

// 将admin_backenduser表的deleted 字段改为bool类型

ALTER TABLE "admin_backenduser" ALTER COLUMN "deleted" TYPE boolean;

3.2、时间格式

mysql里的datetime类型对应vastbase里的timestamptz类型,数据格式会有变化,可能会导致原来的代码解析失败:

然后我用Navicat工具发现无法成功将timestamptz修改为timestamp类型

查询官方文档,我们需要的数据类型为"timestamp without time zone"

用语句试了下,修改成功!数据格式也变了!

ALTER TABLE "test_table" ALTER COLUMN "create_time" TYPE timestamp without time zone;

OK~,用同样的方法在mysql库里查到所有类型为datetime的字段,统一修改字段类型:

SELECT
concat('ALTER TABLE \"',TABLE_NAME , '\" ALTER COLUMN \"',COLUMN_NAME,'\" TYPE timestamp without time zone;')
FROM
information_schema.columns
WHERE
TABLE_SCHEMA = 'test_table' AND COLUMN_TYPE = 'datetime'
ORDER BY
TABLE_NAME;

  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值