MySQL迁移到Microsoft SQL Server 2000
摘要

本白皮书描述了 Microsoft SQL Server 2000 的迁移能力,并提供了帮助开发人员将 MySQL 数据库迁移到 SQL Server 2000 的特定信息。

引言

本指南解释如何利用几个内置的 SQL Server 工具和实用程序将 MySQL 迁移到 Microsoft® SQL Server™ 2000。它还提供了如何修改 MySQL 应用程序,使之与 SQL Server 2000 一起工作的指南。如果您购买了 MySQL 应用程序,您可以继续让这项投资发挥效用,同时又为应用程序结构提供了 SQL Server 2000 的高级功能。

读者对象

本白皮书的读者对象可以是刚接触 SQL Server 及其操作的人,但应非常熟悉 MySQL DBMS 和普通数据库的概念。目标读者必须具备:

为了让说明清楚易懂,使用的基准开发和应用程序平台是 Microsoft Windows® 2000 操作系统 SQL Server 2000。MySQL ODBC 驱动程序与 MySQL 一起使用,MySQL 平台是使用 MySQL 3.23.37 的 Red Hat Linux 7.1。

概述

MySQL 是一个开放源代码的数据库管理系统 (DBMS)。它采用客户端/服务器结构,是一个多线程、多用户的数据库服务器。MySQL 是为高速应用设计的,因此,它并不提供关系数据库系统提供的许多功能,比如子查询、外键、引用完整性、存储过程、触发器和视图。此外,它有一个锁定机制,这对同时有不同用户进行许多写操作的数据表来说是不够的。它还缺少对软件应用程序和工具的支持。

SQL Server 2000 是一个完整的关系数据库管理系统 (RDBMS),它还包括用于 OLAP 和数据挖掘的集成分析功能。SQL Server 2000 满足最大的数据处理系统和商业 Web 站点对数据及分析的存储要求,同时可以为个人和小企业提供易用的数据存储服务。

Microsoft SQL Server 的结构支持高级的服务器功能,比如行一级的锁定、高级查询优化、数据复制、分布式数据库管理以及分析服务。Transact-SQL (T-SQL) 是 SQL Server 2000 支持的 SQL 语言。

本章中提到的结构特点只是 SQL Server 2000 提供的众多特点的一部分。SQL Server 2000 联机图书是安装应用程序时可以利用的一个有用资源。要使用联机图书,请打开 Microsoft SQL Server 程序组并单击“联机图书”。

迁移过程

本章通过列出 MySQL 和 Microsoft SQL Server 2000 的结构来介绍迁移过程。本章包括以下内容:

迁移准备

正确的迁移规划对确保最终成功极其重要。开始迁移前,请查看待迁移 MySQL 数据库的架构。比较 MySQL 和 SQL Server 2000 的数据类型,了解二者的区别。本白皮书的“比较 MySQL 与 Microsoft SQL Server”一节提供了可比数据类型的框架。注意某些 MySQL 数据库对象可能会与 SQL Server 2000 的保留字冲突。下一节中有这些保留字。使用 DTS 迁移到 SQL Server 2000 之前应该先备份并复制 MySQL 数据库文件。

数据类型、保留字和运算符

本节介绍 SQL Server 2000 中使用的数据类型。为了顺利迁移,这里提供了一张 MySQL 和 SQL Server 2000 的数据类型对照表。同时还提供了 Microsoft SQL Server 中使用的保留字列表。它包括以下信息:

支持的 SQL Server 数据类型

数据类型

说明

BIGINT

-2^63 (-9223372036854775808) 2^63-1 (9223372036854775807) 的整型数据(整数)。

INT

-2^31 (-2,147,483,648) 2^31-1 (2,147,483,647) 的整型数据(整数)。

SMALLINT

2^15 (-32,768) 2^15 - 1 (32,767) 的整型数据。

TINYINT

0 255 的整型数据。

BIT

1 0 的整型数据。

DECIMAL

-10^38 +1 10^38 -1 的固定精度和标度的数字数据。

NUMERIC

功能上相当于十进制数。

MONEY

-2^63 (-922,337,203,685,477.5808) 2^63 - 1 (+922,337,203,685,477.5807) 的货币型数据,精确到货币单位的万分之一。

SMALLMONEY

-214,748.3648 +214,748.3647 的货币型数据,精确到货币单位的万分之一。

FLOAT

-1.79E + 308 1.79E + 308 的浮点精度数字数据。

REAL

-3.40E + 38 3.40E + 38 的浮点精度数字数据。

DATETIME

1753 1 1 日到 9999 12 31 日的日期和时间数据,精确到三百分之一秒(3.33 毫秒)。

SMALLDATETIME

1900 1 1 日到 2079 6 6 日的日期和时间数据,精确到一分钟。

CHAR

最大长度 8000 个字符的固定长度非 Unicode 字符数据。

VARCHAR

最大长度 8000 个字符的可变长度非 Unicode 字符数据。

TEXT

最大长度 2^31 - 1 (2,147,483,647) 个字符的可变长度非 Unicode 数据。

NCHAR

最大长度 4,000 个字符的固定长度 Unicode 数据。

NVARCHAR

最大长度 4000 个字符的可变长度 Unicode 数据。sysname 是系统提供的用户定义数据类型,功能上相当于 nvarchar(128),用于引用数据库对象名称。

NTEXT

最大长度 2^31 - 1 (1,073,741,823) 个字符的可变长度 Unicode 数据。

BINARY

最大长度 8,000 个字节的固定长度二进制数据。

VARBINARY

最大长度 8,000 个字节的可变长度二进制数据。

IMAGE

最大长度 2^31 - 1 (2,147,483,647) 字节的可变长度二进制数据。

CURSOR

对光标的引用。

SQL_VARIANT

存储 SQL Server 支持的数据类型(textntexttimestamp sql_variant 除外)值的数据类型。

TABLE

用于存储结果集合供以后处理的特殊数据类型。

TIMESTAMP

整个数据库中都唯一的一个数字,随着行的每次更新而更新。

UNIQUEIDENTIFIER

全局唯一标识符 (GUID)

详细信息请参见 SQL Server 2000 联机图书的“数据类型”主题。

比较 MySQL SQL Server 2000

下表显示了 MySQL 和 SQL Server 2000 的数据类型映射关系。对于某些 MySQL 数据类型,SQL Server 中有不止一种对应的数据类型。此表包括以下信息:

注意

D:用于浮点型,表示小数点后面的位数。最大值可以是 30,但至少应大于 M-2。

L:列值的实际长度

M:表示最大显示尺寸。最大有效显示尺寸是 255。

数字类型

MySQL

大小

SQL Server 2000

TINYINT

1 字节

TINYINT

SMALLINT

2 字节

SMALLINT

MEDIUMINT

3 字节

 

INT

4 字节

INT

INTEGER

4 字节

INT

BIGINT

8 字节

BIGINT

FLOATX<=24

4 字节

FLOAT0

FLOAT25<=X<=53

8 字节

FLOAT25

DOUBLE

8 字节

FLOAT25

DOUBLE PRECISION

8 字节

FLOAT (53)

REAL

8 字节

REAL

DECIMAL

M 字节(D+2,如果 M<D

DECIMAL

NUMERIC

M 字节(D+2,如果 M<D

NUMERIC

日期和时间类型

MySQL

大小

SQL Server 2000

DATE

3 字节

SMALLDATETIME

DATETIME

8 字节

DATETIME

TIMESTAMP

4 字节

TIMESTAMP

TIME

3 字节

SMALLDATETIME

YEAR

1 字节

SMALLDATETIME

字符串类型

MySQL

大小

SQL Server 2000

CHARm

M 字节,1<=M<=255

CHAR

VARCHAR(m)

L+1 字节,L<=M 1<=M<=255

VARCHAR

TINYBLOB

L + 1 字节,L<2^8

BINARY

BLOB

L + 2 字节,L<2^16

VARBINARY

TEXT

L + 2 字节,L<2^16

TEXT

MEDIUMBLOB

L + 3 字节,L<2^24

IMAGE

MEDIUMTEXT

L + 3 字节,L<2^24

TEXT

LONGBLOB

L + 4 字节,L<2^32

IMAGE

LONGTEXT

L + 4 字节,L<2^32

TEXT

ENUM (VALUE1, VALUE2, ...)

1 2 字节,取决于枚举值的数量(最多 65535 个值)。

无可用数据类型,但 CHECK 约束* 提供功能。

SET (VALUE1, VALUE2, ...)

1234 8 字节,取决于集合成员的最大数量

 

* Check 约束通过限制字段中可以接受的值,强制实现数据完整性。详细信息请参见联机图书的“CHECK 约束”主题。

Microsoft SQL Server 2000 保留字

ADD

EXCEPT

PERCENT

ALL

EXEC

PLAN

ALTER

EXECUTE

PRECISION

AND

EXISTS

PRIMARY

ANY

EXIT

PRINT

AS

FETCH

PROC

ASC

FILE

PROCEDURE

AUTHORIZATION

FILLFACTOR

PUBLIC

BACKUP

FOR

RAISERROR

BEGIN

FOREIGN

READ

BETWEEN

FREETEXT

READTEXT

BREAK

FREETEXTTABLE

RECONFIGURE

BROWSE

FROM

REFERENCES

BULK

FULL

REPLICATION

BY

FUNCTION

RESTORE

CASCADE

GOTO

RESTRICT

CASE

GRANT

RETURN

CHECK

GROUP

REVOKE

CHECKPOINT

HAVING

RIGHT

CLOSE

HOLDLOCK

ROLLBACK

CLUSTERED

IDENTITY

ROWCOUNT

COALESCE

IDENTITY_INSERT

ROWGUIDCOL

COLLATE

IDENTITYCOL

RULE

COLUMN

IF

SAVE

COMMIT

IN

SCHEMA

COMPUTE

INDEX

SELECT

CONSTRAINT

INNER

SESSION_USER

CONTAINS

INSERT

SET

CONTAINSTABLE

INTERSECT

SETUSER

CONTINUE

INTO

SHUTDOWN

CONVERT

IS

SOME

CREATE

JOIN

STATISTICS

CROSS

KEY

SYSTEM_USER

CURRENT

KILL

TABLE

CURRENT_DATE

LEFT

TEXTSIZE

CURRENT_TIME

LIKE

THEN

CURRENT_TIMESTAMP

LINENO

TO

CURRENT_USER

LOAD

TOP

CURSOR

NATIONAL

TRAN

DATABASE

NOCHECK

TRANSACTION

DBCC

NONCLUSTERED

TRIGGER

DEALLOCATE

NOT

TRUNCATE

DECLARE

NULL

TSEQUAL

DEFAULT

NULLIF

UNION

DELETE

OF

UNIQUE

DENY

OFF

UPDATE

DESC

OFFSETS

UPDATETEXT

DISK

ON

USE

DISTINCT

OPEN

USER

DISTRIBUTED

OPENDATASOURCE

VALUES

DOUBLE

OPENQUERY

VARYING

DROP

OPENROWSET

VIEW

DUMMY

OPENXML

WAITFOR

DUMP

OPTION

WHEN

ELSE

OR

WHERE

END

ORDER

WHILE

ERRLVL

OUTER

WITH

ESCAPE

OVER

WRITETEXT

用于数据迁移的 MySQL 工具

MySQL 提供了几个客户端工具和实用程序,最常用的有:

SQL Server 的迁移工具

SQL Server 有一组丰富的工具和实用程序,可以简化从 MySQL 的迁移。SQL Server 2000 数据转换服务 (DTS) 是一组图形化工具和可编程对象,用于从各种来源提取、转换和合并数据到一个或多个目标。

数据转换服务的功能

Microsoft SQL Server 2000 中的数据转换服务提供了从不同数据源迁移数据的方法。DTS 可以用向导程序驱动,也可以用 DTS 程序包设计器创建。DTS 向导可以快速完成数据直接复制。程序包设计器允许开发人员用多种编程语言编写自定义转换脚本。DTS 工具允许您:

数据转换服务术语

以下是用于描述 DTS 的术语:

DTS 程序包是一个连接、DTS 任务、DTS 转换以及工作流约束的有组织的集合,可以在 DTS 设计器中用图形化方式或用编程方式汇编在一起。

DTS 任务是一个分立的功能集合,在程序包中单步执行。每个任务都定义一个数据移动和数据转换过程中要执行的工作项目,或者一个要执行的作业。

DTS 转换是数据到达目的地之前要对它应用的一个或多个功能或操作。

DTS 程序包工作流允许数据转换服务 (DTS) 逐步运行,由优先约束对 DTS 程序包中的工作项目进行排序。您可以在 DTS 设计器中用图形方式设计 DTS 数据包工作流,也可用编程方式设计。

元数据 DTS 提供的功能可以将程序包元数据和数据沿袭信息保存到元数据服务,并链接那些信息类型。您可以存储程序包中引用的数据库的类别元数据,以及统计与数据集市或数据仓库中特定数据行有关的历史信息。

直接迁移

将数据从 MySQL 迁移到 Microsoft SQL Server 的最直接选项是安装 myODBC 支持并创建一个 DTS 程序包,用它们将数据库从 MySQL 导入并创建到 Microsoft SQL Server。

以下是设置 Microsoft SQL Server 以迁移 MySQL 数据库的逐步操作。

1.      安装 MyODBC 支持,它可在以下网址下载 http://www.mysql.com/

2.      安装过程中,系统会提供以下对话框:


如果您的浏览器不支持内嵌框,请单击此处在单独的页中查看。

填写 ODBC 安装设置,使用如下信息:

Windows DSN 名称:

test

说明:

这是个测试数据库

MySQL 数据库:

test

服务器:

seawolf.microsoft.com

用户:

cgunn

密码:

my_password

端口:

3306

使用上述设置后,Windows DSN 名称在建立连接的计算机上必须唯一,服务器设置会完全验证域名(确保 DNS 或您提供的名称具备名称解析)或 IP 地址的有效性。

3.