如何将 SQL Server 数据库转换为 MySQL 数据库 [关闭]

Posted

技术标签:

【中文标题】如何将 SQL Server 数据库转换为 MySQL 数据库 [关闭]【英文标题】:How to convert SQL Server database to MySQL database [closed] 【发布时间】:2011-11-08 21:47:33 【问题描述】:

我使用 ASP.Net 创建了一个网站,使用 SQL Server 创建了一个表,并且我已将其发布到提供者。

我想要的是将MSSQL.sql 文件转换为mysql.sql 文件。是否有任何免费软件,或者一些代码可以将其转换为 SQL Server 到 MySQL ?

如果有人可以帮助我,将不胜感激。

【问题讨论】:

How to export MS SQL database to MYSQL?的可能重复 【参考方案1】:

将数据库从 MS SQL 迁移到 MySQL 服务器时,通常还需要根据 MySQL 语法转换 MS SQL 查询。 MS SQL 和 MySQL 中的 SQL 查询语法相似但不相同。本文发现了 MS SQL 和 MySQL 语法之间 10 个最常见的差异。本指南的目标受众应具备一般的数据库管理知识和编写 SQL 查询的经验。

有时 MS SQL 表或列名在查询中用方括号括起来(例如,如果包含空格或其他原因)。 MySQL不允许在列名表周围使用方括号,它们都必须用`符号替换或截断:[object] -> `object`

MS SQL 提供了有效的解决方案来避免命名对象冲突并管理用户对数据访问的权限。这是模式,用于对单个数据库中的对象进行分组和分类的逻辑容器。使用模式时,查询中数据库对象的全名可能类似于 database.schema.object。但是,MySQL 中没有这样的语义,因此必须从查询中删除所有模式名称。

CONVERT() 函数用于在 MS SQL 中将一种数据类型的表达式转换为另一种数据类型。 MySQL CONVERT() 函数在不同字符集之间转换文本数据。但是,有等效的函数 CAST(),因此 MS SQL 查询中的每一次 convert(type, expression) 都必须替换为 MySQL 查询中的 cast(expression AS type)。 LEN() 函数返回 MS SQL 中字符串表达式的长度。此函数的 MySQL 等效项是 LENGTH()。 MS SQL 函数 DATEADD() 将时间间隔添加到日期的指定部分。 MySQL 运算符 '+' 可以执行以下相同操作:

DATEADD(year,  1, $date$) -> $date$ + interval 1 year
DATEADD(month, 1, $date$) -> $date$ + interval 1 month
DATEADD(day,   1, $date$) -> $date$ + interval 1 day
where $date$ is an expression of DATE type.

Microsoft SQL 和 MySQL 有不同的日期处理函数集,尽管它们中的大多数可以复制如下:

DATENAME(month,   $date$) -> DATE_FORMAT($date$, '%M') or MONTHNAME(expression)
DATENAME(weekday, $date$) -> DATE_FORMAT($date$, '%W') or DAYNAME(expression)
DATEPART(year,    $date$) -> DATE_FORMAT($date$, '%Y')
DATEPART(month,   $date$) -> DATE_FORMAT($date$, '%m')
DATEPART(day,     $date$) -> DATE_FORMAT($date$, '0')
GETDATE()                 -> NOW()
GETUTCDATE()              -> UTC_TIMESTAMP()

其中 $date$ 是 DATE 类型的表达式。

MS SQL 运算符 '+' 允许像这样连接字符串:'string1' + 'string2'。在 MySQL 中,此类表达式必须替换为 CONCAT('string1', 'string2')。 MS SQL 函数 CONTAINS(expression, template) 在表达式中搜索模板的匹配项。 MySQL 具有实现相同语义的运算符 LIKE:表达式 LIKE %template% 如果 MS SQL 查询包含“TOP (100) PERCENT”模式,则在编写 MySQL 查询时将其删除。如果该模式中还有其他百分比数量,则可以将其替换为 MySQL 中的以下代码(适用于 MySQL 5.0.7 及更高版本):

SET @amount =(SELECT COUNT(*) FROM %table name%) * %percentage% / 10; 
PREPARE STMT FROM '%original query% FROM %table name% LIMIT ?'; 
EXECUTE STMT USING @amount; 

JOIN 结构的语法在 MS SQL 和 MySQL 中非常相似。唯一的区别是 MS SQL 关键字 WHERE 在 MySQL 中被替换为 ON。例如:

... table1 CROSS JOIN table2 WHERE condition

必须翻译成

... table1 CROSS JOIN table2 ON condition

【讨论】:

请格式化您的答案。 这对我来说似乎是一篇文章的复制/粘贴。【参考方案2】:

phpmyadmin 选项非常适合完成这项工作。但有时您会在转换时看到错误。我们实际上研究了 MSSQL 的 DB 结构,并基于它编写了自己的 mysql 语句,并进行了单元测试并学到了一些东西。因此,除了转换之外,如果您还想亲自动手,这是一个很好的方法。

【讨论】:

举例说明您必须手动处理的内容会更有用。理想情况下,为您的代码提供一些基本的 cmets,以便可以查看遇到了哪些问题。【参考方案3】:

如果您使用phpMyAdmin 来管理您的 MySQL(几乎所有 Web 主机都使用),您可以简单地以兼容模式为 MSSQL 导入文件。

为此,请转到导入 -> 选择您的文件 -> 然后从 SQL 兼容模式中选择“MSSQL”: 在格式特定选项下。

如果您还没有安装 phpMyAdmin,您可以从我上面链接的网站免费下载。他们网站上的安装说明非常清楚。

导入后,如果您想以 MySQL 的语法保存 SQL 文件的副本,只需使用 Export 功能。

【讨论】:

我会尝试,但很抱歉我不能投票给你,因为我没有足够的声誉来投票给你 没关系!如果我的答案对您有用,那么选择它当然就足够了。如果您有任何问题,请告诉我! 好的,我会尝试,但我遇到了另一个问题,问题是我正在使用来自工具箱的数据中的 SQLDATASOURCE 连接我的数据库,我希望它连接。除非指定了插入命令,否则 sqldatasource 不支持插入错误 这个连接实际上在你的 MSSQL 代码中吗?还是您实际连接到 MS SQL 数据库时遇到的问题?如果它不在您的代码中:不幸的是,我只对 MS SQL 非常熟悉。我建议创建一个新的问题线程来询问该特定问题。 我正在使用这个连接字符串连接 server=localhost;User Id=root;password=test;database=mydatabase

以上是关于如何将 SQL Server 数据库转换为 MySQL 数据库 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SQL Server 数据库转换为 MySQL 数据库 [关闭]

如何将查询从 phpMyAdmin SQL Dump 转换为 sql server 易读查询

如何将 SQL Server SMALLDATETIME 转换为 Unix 时间戳?

如何在 MS Access 2007 或 MS SQL Server 2005 中通过 SQL 将字段转换为行

如何将 DB2 触发器转换为 SQL Server?

如何使用 C# 将数据表从 SQL Server 转换为 Excel [重复]