【问题标题】:How do you port a SqlServer database to MySQL?如何将 Sql Server 数据库移植到 MySQL?
【发布时间】:2011-01-13 22:02:19
【问题描述】:

我有一个想要移植到 MySQL 的 SqlServer 数据库。最好的方法是什么。需要移植的东西有:

  • 表格(和数据)
  • FileStream → MySQL 等效项?
  • 存储过程
  • 功能

【问题讨论】:

    标签: sql mysql sql-server tsql


    【解决方案1】:

    数据类型比较相似。

    在 MySQL 中没有等效的 FileStream - 文件必须存储为 BLOB,或者在文件系统上存储路径存储在数据库中。

    从 TSQL 迁移意味着:

    • MySQL 中没有 WITH 子句 - 它必须转换为派生表/内联视图
    • 没有TOP 语法 - 这些必须转换为使用LIMIT
    • MySQL 中没有排名/分析功能 - 不能使用 ROW_NUMBERRANKDENSE_RANKNTILE。见this article for alternatives
    • MySQL 视图有notoriously limited functionality
      • SELECT 语句的 FROM 子句中不能包含子查询。
      • SELECT 语句不能引用系统或用户变量。
      • 在存储的程序中,定义不能引用程序参数或局部变量。
      • SELECT 语句不能引用准备好的语句参数。
      • 定义中引用的任何表或视图都必须存在。但是,创建视图后,可以删除定义所引用的表或视图。在这种情况下,使用视图会导致错误。要检查视图定义是否存在此类问题,请使用 CHECK TABLE 语句。
      • 定义不能引用 TEMPORARY 表,您也不能创建 TEMPORARY 视图。
      • 在视图定义中命名的任何表在定义时都必须存在。
      • 您不能将触发器与视图相关联。
      • 从 MySQL 5.0.52 开始,SELECT 语句中列名的别名会根据 64 个字符的最大列长度(而不是 256 个字符的最大别名长度)进行检查。
    • 必须将动态 SQL 转换为使用 MySQL 的 Prepared Statement 语法

    【讨论】:

      【解决方案2】:

      官方 MySQL 开发网站上提供了一个 guide/article 以及一些有用的提示。

      【讨论】:

        【解决方案3】:

        这不适合胆小的人。这里有一篇文章解释了你的目的:

        http://searchenterpriselinux.techtarget.com/news/column/0,294698,sid39_gci1187176,00.html
        

        【讨论】:

        • 文章链接不好(因为链接死了),在这种情况下,文章需要登录才能阅读
        • @gregmac - 或许我将文章的所有 1,100 字都粘贴进去会更好?这个链接有九年的历史了,它没有死,也不需要登录。所以放松一点。
        猜你喜欢
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 2020-02-18
        相关资源
        最近更新 更多