【发布时间】:2011-11-08 21:47:33
【问题描述】:
我使用 ASP.Net 创建了一个网站,使用 SQL Server 创建了一个表,并且我已将其发布到提供者。
我想要的是将MSSQL.sql 文件转换为Mysql.sql 文件。是否有任何免费软件,或者一些代码可以将其转换为 SQL Server 到 MySQL ?
如果有人可以帮助我,将不胜感激。
【问题讨论】:
标签: mysql sql-server database-migration
我使用 ASP.Net 创建了一个网站,使用 SQL Server 创建了一个表,并且我已将其发布到提供者。
我想要的是将MSSQL.sql 文件转换为Mysql.sql 文件。是否有任何免费软件,或者一些代码可以将其转换为 SQL Server 到 MySQL ?
如果有人可以帮助我,将不胜感激。
【问题讨论】:
标签: mysql sql-server database-migration
将数据库从 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
【讨论】:
PHPmyadmin 选项非常适合完成这项工作。但有时您会在转换时看到错误。我们实际上研究了 MSSQL 的 DB 结构,并基于它编写了自己的 mysql 语句,并进行了单元测试并学到了一些东西。因此,除了转换之外,如果您还想亲自动手,这是一个很好的方法。
【讨论】:
如果您使用phpMyAdmin 来管理您的 MySQL(几乎所有 Web 主机都使用),您可以简单地以兼容模式为 MSSQL 导入文件。
为此,请转到导入 -> 选择您的文件 -> 然后从 SQL 兼容模式中选择“MSSQL”: 在格式特定选项下。
如果您还没有安装 phpMyAdmin,您可以从我上面链接的网站免费下载。他们网站上的安装说明非常清楚。
导入后,如果您想以 MySQL 的语法保存 SQL 文件的副本,只需使用 Export 功能。
【讨论】: