AccessからMySQLへの移行にMySQL Workbenchを使ってみましたが、テーブル名やカラム名に日本語が含まれる場合にはうまく移行できませんでした。結局Accessのエクスポート機能を使ってODBC経由でデータを移行しました。手順を簡単にまとめました。
今回はAccessと同一端末、つまりWindowsにMySQLをインストールして移行作業を行いました。Accessのバージョンは2003、MySQLのバージョンは5.6です。
MySQL ODBCドライバ
MySQLのODBCドライバをインストールしてDSNを作成します。ドライバの所在はこちら。
エクスポート
Accessのオブジェクトブラウザでエクスポートするテーブルを選択してエクスポート。リンクテーブルもエクスポートできます。
エクスポートを開始するとエクスポート先の名前を聞かれます。ここでテーブル名を変更することができます。
データソースの選択で最初に作成したDSNを選択してOKボタンを押すとエクスポートできます。
カラム名はそのままエクスポートされます。つまり日本語であれば日本語のままです。(弊社では普段テーブル名やカラム名に日本語を使うことはないので、移行後に名前を変更しました。)
カラムのデータ型は以下のように変換されます。数値型などはフィールドサイズ(整数型、浮動小数点型など)に応じてMySQL側の型が変化します。
注意点
- Accessのprimary keyの定義はMySQLに反映されない。
- Accessのオートナンバー型はMySQLに反映されない。
- AccessのYes/No型(ブール)はMySQLではbool(1)となる。MySQLでboolのカラムをつくるとtinyint(1)。
エクスポートの自動化
エクスポートはテーブル単位で行いますので、テーブルの数が多い場合やエクスポートを繰り返し行う場合には大変な手間です。VBAで簡単なスクリプト(Accessのモジュール)を書けば自動化できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Option Compare Database '------------------------------------------------------------ ' export ' '------------------------------------------------------------ Function export() On Error GoTo export_Err Set dbs = Application.CurrentDb For Each tbl In dbs.TableDefs DoCmd.TransferDatabase acExport, "ODBC", "ODBC;DSN=mysqlTest;UID=root;PWD=XXX", acTable, tbl.Name, tbl.Name, False Next export_Exit: Exit Function export_Err: MsgBox Error$ Resume export_Exit End Function |