Поделиться через


Миграция из MySQL в SQL Server 2008

Тали Смит

Введение

С появлением драйвера SQL Server для PHP разработчики PHP теперь имеют надежную платформу для разработки и запуска веб-приложений: Windows Server 2008 и Microsoft® SQL Server® 2008.

Миграция из MySQL в SQL Server 2008

Вы можете перенести базу данных MySQL в SQL Server 2008, выполнив следующие действия:

  1. Определите, как сопоставлять базы данных MySQL с SQL Server 2008. У вас есть два основных варианта:

    • Сопоставляйте каждую базу данных MySQL с отдельной базой данных SQL Server.
      Например, можно сопоставить базу данных MyDB MySQL с базой данных SQL Server MyDB.
    • Сопоставляйте каждую базу данных MySQL с одной базой данных SQL Server, но отдельной схемой.
      Например, можно сопоставить базу данных MyDB MySQL с базой данных SQL Server MySQLDatabases, схемой MyDB.
  2. В SQL Server схемы не обязательно связаны с конкретным пользователем или именем входа, а один сервер содержит несколько баз данных.

  3. Преобразование объектов базы данных; это таблицы, ограничения таблиц, индексы, представление, процедуры, функции и триггеры.

  4. Сопоставление типов данных из типа данных MySQL с типом данных SQL Server.

  5. Перезапись представлений, процедур и функций в соответствии с синтаксисом SQL Server.

  6. Измените приложения по мере необходимости, чтобы они могли подключаться и работать с SQL Server 2008.

После успешного преобразования базы данных перенесите данные из старой базы данных MySQL в только что созданную базу данных SQL Server 2008. Для этой задачи можно использовать службы Microsoft® SQL Server® Integration Services (SSIS), например.

Преобразование объектов базы данных

Затем необходимо преобразовать объекты базы данных.

Имена объектов схемы

  • В SQL Server 2008 имя объекта может содержать до 128 символов.

  • Имена неквотированных идентификаторов должны соответствовать этим правилам:

    • Первый символ должен быть буквенно-цифровым, символом подчеркивания (_), знаком по адресу (@) или номерным знаком (#).
    • Последующие символы могут включать буквенно-цифровые символы, знак подчеркивания, знак (@), знак числа или знак доллара.
    • Идентификатор не должен быть зарезервированным словом Transact-SQL.
    • Внутри идентификаторов запрещается использовать символы пробела или специальные символы.
  • Идентификаторы, начинающиеся с @или знака числа, имеют специальные значения. Идентификаторы, начиная с @, являются именами локальных переменных. Те, которые начинаются с знака числа, являются временными именами таблиц.

  • Чтобы процитировать имя идентификатора в Transact-SQL, необходимо использовать квадратные скобки ([]).

Таблицы, ограничения, индексы и представления

  • Преобразование таблиц с помощью сопоставления типов данных столбцов (см. раздел "Сопоставление типов" далее в этом руководстве).
  • SQL Server 2008 поддерживает следующие ограничения таблицы (столбца): NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY и CHECK. Преобразуйте каждый тип ограничения в соответствии с синтаксисом Transact-SQL.
  • Инструкции SELECT с VIEW также должны быть преобразованы в синтаксис Transact-SQL SELECT.

Хранимые процедуры и пользовательские функции

  • Преобразуйте хранимые процедуры и функции с помощью синтаксиса Transact-SQL.
  • SQL Server 2008 не поддерживает инструкции DML в определяемых пользователем функциях. Это означает, что вы не можете изменить данные из функции.

Триггеры

  • В SQL Server 2008 нет триггеров BEFORE.
  • Преобразуйте несколько триггеров ДО в один триггер INSTEAD OF.

Перенос типов данных MySQL

Вам потребуется перенести типы данных MySQL. Следуйте рекомендациям по сопоставлениям типов для преобразования столбцов таблицы, аргументов вложенных значений, возвращаемых значений и локальных типов данных переменных, как показано в документации. http://tinyurl.com/yf9cfcg

Перенос системных функций MySQL

Затем потребуется перенести системные функции MySQL.

Эквивалентные функции

Следующие системные функции MySQL доступны так же, как и в коде SQL Server:

ASCII, LEFT, LOWER, LTRIM, REPLACE, REVERSE, RIGHT, RTRIM, SOUNDEX, SPACE, SUBSTRING, UPPER, ABS, ACOS, ASIN, ATAN, ATAN2, CEILING, COS, COT, DEGREES, EXP, FLOOR, LOG, LOG10, PI, POWER, RADIANS, RAND, ROUND, SIGN, SIN, SQRT, TAN, DAY, MONTH, COALESCE, NULLIF, CAST, CONVERT.

Неподдерживаемые функции

Следующие функции MySQL нельзя легко эмулировать в SQL Server из-за различий в логических и физических организациях и модели безопасности:

BENCHMARK, CHARSET, COERCIBILITY, COLLATION, CRC32, DATE_ADD с интервалом, DATE_SUB с интервалом, GET_FORMAT, PERIOD_ADD, PERIOD_DIFF, SUBTIME, TIMESTAMPADD, TIMESTAMDIFF, MATCH, EXTRACTVALUE, UPDATEXML, GET_LOCK, IS_FREE_LOCK, MASTER_POS_WAIT RELEASE_LOCK.

Примечание.

: В этой статье приведены краткие материалы: "Руководство по миграции из MySQL в SQL Server 2008" АлександрОм Павловым, Юрием Русаковом и Юрием Тернакова, опубликованном в августе 2009 года.*

[1] IBM Corporation. 14 ноября 2006 года. Используйте PHP в System i, часть 1. Введение и примеры.