将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 支持的数据类型(text、ntext、timestamp 和 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 |
|
FLOAT(X<=24) |
4 字节 |
FLOAT(0) |
|
FLOAT(25<=X<=53) |
8 字节 |
FLOAT(25) |
|
DOUBLE |
8 字节 |
FLOAT(25) |
|
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 |
|
CHAR(m) |
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, ...) |
1、2、3、4 或 8 字节,取决于集合成员的最大数量 |
|
* Check 约束通过限制字段中可以接受的值,强制实现数据完整性。详细信息请参见联机图书的“CHECK 约束”主题。
Microsoft SQL Server 2000 保留字
|
ADD |
EXCEPT |
PERCENT |
|
ALL |
EXEC |
PLAN |
|
ALTER |
EXECUTE |
PRECISION |
|
AND |
EXISTS |
PRIMARY |
|
ANY |
EXIT |
|
|
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.