项目从mysql移植到SQL sqlserver问题汇总

本文介绍从MySQL迁移到MSSQL时遇到的主要问题及解决方案,包括表结构调整、分页查询、数据类型差异、驱动包选择等,并提供实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   一、       数据库表结构改变:

        使用navicat for mysql导出的sql语句如例

CREATE TABLE `departments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `depname` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

      ms sqlserver不支持·符号,所有的表名、字段名需要去掉·号。  

       mysql的主键自增长为AUTO_INCREMENT, ms sqlserver为identity

      ms server不支持int(11)的写法,改为int

例如:

CREATE TABLE [dbo].[departments](
 [depname] [nchar](10) NULL,
 [id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]

 

插入数据的时候,ms server不需要传入自增长的主键,如果已有数据id,可以如下操作

SET IDENTITY_INSERT [TableName] ON

insert() valus(......)

SET IDENTITY_INSERT [TableName] OFF

 

二、项目使用springjdbc链接ms sqlserver2008,起初用的微软提供的jar包,但一直报错,提示不能重复获取多次,后来google了一下是微软驱动包兼容性问题,下载

第三方jtds-1.2.3.jar解决问题

 

三、mysql分页limit的使用,而在ms sqlserver不支持limit,使用top解决

//mysql版本

 public List getPages(int currentPage, int NUM_PER_PAGE) {
  List<Map<String, Object>> rows = jt
    .queryForList(

"select name from tablename limit ?,?",
         new Object[] {
        (currentPage * NUM_PER_PAGE - NUM_PER_PAGE),
        NUM_PER_PAGE });

  return rows;
 }


       
      //ms sql版本
      "select  TOP (?) name from tablename where  (ID NOT IN (SELECT TOP (?) id from tablename ORDER BY id)) ORDER BY ID",

 new Object[] {
     
         NUM_PER_PAGE ,currentPage * (NUM_PER_PAGE - NUM_PER_PAGE)});

  return rows;
 }

需要注意的是,top后面的占位符,不能使用?,需要用(?)代替

 

四、mysql支持boolean类型,而ms sqlserver不支持。

 

五、使用springjdbc传参的时候,mysql不需要指定string的类型,而ms  sqlserver需要指定,因为ms sqlserver可能是varchar,也可能是nvarchar类型。比如

 Object[] params = new Object[]{username}; 

    int[] types = new int[]{Types.VARCHAR}; 

    user=jdTempl.queryForObject(querySql,params,types,rowMapper);

 六、发现通过ms server2008导出数据,id自动增长属性消失,通过

先删除原有的id列
alter table aa drop column id 
然后再重新添加一列具有 identity属性的字段
alter table aa add id int identity(1,1)

 

 

最后附上jdbc.properties配置文件

#mysql database setting
#jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://localhost:3306/empdb?useUnicode=true&characterEncoding=utf-8
#jdbc.username=root
#jdbc.password=123456

#oracle database settings
#jdbc.driver=oracle.jdbc.driver.OracleDriver
#jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
#jdbc.username=username

#jdbc.password=123456

#mssql database settings
#jdbc.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
#jdbc.url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=empdb
jdbc.driver=net.sourceforge.jtds.jdbc.Driver
jdbc.url=jdbc:jtds:sqlserver://localhost:1433/empdb


jdbc.username=sa
jdbc.password=123456


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值