welcome to xlongwei.com

欢迎大家一起学习、交流、分享


QQ:9167702333 邮箱:admin@xlongwei.com

MySql 数据迁移至 SqlServer


分类 MySQL   关键字 分享   标签 linux   mysql   发布 hongwei  1435569880265
注意 转载须保留原文链接,译文链接,作者译者等信息。  
最近项目需要将MySql数据库迁移至SqlServer,分享一个转换工具软件,下载链接:mysqltomssql

第一步:连接MySql数据库


第二步:连接SqlServer数据库,本机留空


第三步:选择目标数据库和覆盖方式


第四步:选择所有表,等待进度完成


程序代码调整
pom.xml
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.2.4</version>
<scope>runtime</scope>
</dependency>
repository.properties
ds.url=jdbc:jtds:sqlserver://10.10.30.3:1433;DatabaseName=dbname
ds.username=dbuser
ds.password=dbpaswd
repository.xml,查看sqlserver数据库版本使用select @@version
<bean id="hibernateJpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.SQLServer2008Dialect" />
</bean>
更多详细配置见文章:Spring Data JPA
数据自动添加创建时间,更新时间使用@PreUpdate。mysql语法为default current_timestamp,转换工具生成为default '',修改为default GETDATE()后没起作用。
//BaseEntity
@PrePersist
public void prePersist() {
if(createAt==null) createAt = new Date();
}

转换数据也可以直接修改导出的sql脚本
  • 表名和字段名不能有点号`table`,点号是mysql的语法,sqlserver支持方括号[dbo].[table].[column]
  • 表名和字段名不能使用sql关键字和sqlserver保留字,我遇到了这几个雷:user system_user key
    解决关键字冲突:@Table(name="users") public class User extends BaseEntity
    @Column(name="name") private String key; (hibernate处理关键字冲突时不知道哪里配置添加方括号[field],如果能加上方括号应该不会语法错误)
  • 时间类型:`create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,改成create_at datetime null
  • 有些语法不支持可暂时去掉:comment '注释',Engine=InnoDB,
    drop table name if exists name,修改为if object_id('name') is not null DROP TABLE  name;
    删除空行:^\r\n,正则替换为空;