作成者: Tali Smith
はじめに
PHP 用 SQL Server Driver の登場により、PHP 開発者は、Windows Server 2008 および Microsoft® SQL Server® 2008 という Web アプリケーションを開発および実行するための強力なプラットフォームを使用できるようになりました。
MySQL から SQL Server 2008 に移行する
以下の手順を使用して、MySQL データベースから SQL Server 2008 に移行できます。
MySQL データベースを SQL Server 2008 にマップする方法を決定します。 主に次の 2 つのオプションがあります。
- 各 MySQL データベースを個別の SQL Server データベースにマップします。
たとえば、MyDB MySQL データベースを MyDB SQL Server データベースにマップできます。 - 各 MySQL データベースを 1 つの SQL Server データベースに、スキーマを分けてマップします。
たとえば、MyDB MySQL データベースを MySQLDatabases SQL Server データベース (スキーマ MyDB) にマップできます。
- 各 MySQL データベースを個別の SQL Server データベースにマップします。
SQL Server では、スキーマは必ずしも特定のユーザーまたはログインにリンクされるとは限らず、1 つのサーバーに複数のデータベースが含まれます。
データベース オブジェクトを変換します (テーブル、テーブル制約、インデックス、ビュー、プロシージャ、関数、トリガー)。
データ型を、MySQL データ型から SQL Server データ型にマップします。
SQL Server 構文に従って、ビュー、プロシージャ、関数を書き換えます。
必要に応じてアプリケーションを変更し、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 構文に従って各種類の制約を変換します。
- VIEW を含む SELECT ステートメントも、Transact-SQL SELECT 構文に従って変換する必要があります。
ストアド プロシージャおよびユーザー定義関数
- Transact-SQL 構文を使用してストアド プロシージャと関数を変換します。
- SQL Server 2008 では、ユーザー定義関数での DML ステートメントはサポートされていません。 つまり、関数内からデータを変更することはできません。
トリガー
- SQL Server 2008 には BEFORE トリガーがありません。
- 複数の BEFORE トリガーを 1 つの 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、INTERVAL を使用した DATE_ADD、INTERVAL を使用した DATE_SUB、GET_FORMAT、PERIOD_ADD、PERIOD_DIFF、SUBTIME、TIMESTAMP、TIMESTAMPADD、TIMESTAMPDIFF、MATCH、EXTRACTVALUE、UPDATEXML、GET_LOCK、IS_FREE_LOCK、MASTER_POS_WAIT、RELEASE_LOCK。
Note
: この記事は、2009 年 8 月に公開された「MySQL から SQL Server 2008 への移行ガイド」 (作成者: Alexander Pavlov、Yuri Rusakov、Yuri Turnakov) の内容をまとめたものです。*
詳細情報のリンク:
[1] IBM株式会社。 2006 年 11 月 14 日。 Use PHP on System i, Part 1: Introduction and examples (System i で PHP を使用する、パート 1: 概要と例)。