如何将SQL Server数据库转换为MySQL数据库

3
我使用ASP.Net创建了一个网站,使用SQL Server创建了一张表,然后将其发布到提供商。现在我想将MSSQL.sql文件转换成Mysql.sql文件。有没有免费的软件或代码可以将SQL Server转换为MySQL?如果有人能帮忙,那就太感激了。

可能是如何将MS SQL数据库导出到MYSQL?的重复问题。 - shA.t
3个回答

18
如果您使用phpMyAdmin来管理MySQL(几乎所有的网络主机都会使用),则可以在MSSQL的兼容模式下导入文件。
要做到这一点,请转到导入->选择文件->然后在格式特定选项下选择"MSSQL"作为SQL兼容模式:
如果您尚未安装phpMyAdmin,则可以从我上面链接的网站免费下载。他们网站上的安装说明非常清晰。
导入完成后,如果您想要以MySQL语法保存SQL文件的副本,则可以使用导出功能。

1
我会尝试,但很抱歉我不能投票给你,因为我没有足够的声望来投票。 - Ishaq G
1
没问题!如果我的答案对您有用,那么选择它作为最佳答案肯定已经足够了。如果您有任何问题,请告诉我! - ShaneC
好的,我会尝试解决,但我还有另一个问题。问题是我正在使用工具箱中的SQLDATASOURCE连接我的数据库。我想要它连接成功,但是出现了错误。错误提示是:除非指定插入命令,否则在sqldatasource中不支持插入操作。 - Ishaq G
我正在使用以下连接字符串连接服务器:server=localhost;User Id=root;password=test;database=mydatabase - Ishaq G
你的回答是关于相反方向的转换。OP 询问的是 mssql > mysql。 - Anthony
显示剩余2条评论

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.

微软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 的运算符实现了相同的语义:expression 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; 

在MS SQL和MySQL中,JOIN语句的语法非常相似。唯一的区别是MySQL中使用ON关键字替换了MS SQL中的WHERE关键字。例如:

... table1 CROSS JOIN table2 WHERE condition

必须被翻译成

... table1 CROSS JOIN table2 ON condition

请格式化您的答案。 - Werner Henze
4
这似乎是一个从文章中复制/粘贴的内容。 - alekosot

0

使用PHPmyadmin选项来完成这项工作是不错的选择。但有时在转换过程中会出现错误。我们实际上研究了MSSQL的数据库结构,并根据它编写了自己的mysql语句,进行了单元测试并学到了一些东西。因此,除了转换之外,如果您也想亲自动手操作,这是一个很好的方法。


1
提供手动处理的示例会更有用。最好附上您的代码和一些基本注释,以便人们可以看到遇到了哪些问题。 - Balmipour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接