【SQLiteからMySQLへの移行2】 SQLiteダンプしたSQLのMySQLでの実行

【SQLiteからMySQLへの移行1】 SQLiteでのDBのダンプ」の続き。

SQLiteでダンプしたDB(SQL文)をMySQLへ投入する。

1.mysqlへログインしてDBへ接続する

C:\>mysql -uroot -p
Enter password: *******
Welcome to the MySQL monitor.  Commands end with ; or \g.

-- データベース一覧の確認
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

-- データベースへの接続
mysql> use test;
Database changed

-- 接続しているデータベースの確認
mysql> select database();
+------------+
| database() |
+------------+
| test       |
+------------+
1 row in set (0.00 sec)

2.SQLiteでダンプしたSQLの実行

mysql> source C:\dev\SQLite\EventDateDump.sql

実行した結果、エラーとなった(´Д⊂ヽ、。

mysql> source C:\dev\SQLite\EventDateDump.sql
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'PRAGM
A foreign_keys=OFF' at line 1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'TRANS
ACTION' at line 1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '[Hist
oricalDate] ([id] INTEGER NOT NULL UNIQUE,
[nen] INTEGER,
[tuki] INTEGER,
[' at line 1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '"Hist
oricalDate" VALUES(1,2007,9,17,-1,0,'JP','莨大エ・域噴閠√・譌・・・,0,NULL,' at
line 1
Query OK, 0 rows affected (0.00 sec)

実行したSQLは下記。ダンプしたファイルのinsert文は1行のみ実行してみた。

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE [HistoricalDate] ([id] INTEGER NOT NULL UNIQUE,
[nen] INTEGER,
[tuki] INTEGER,
[niti] INTEGER,
[zi] INTEGER,
[fun] INTEGER,
[kuni] TEXT,
[event] TEXT,
[lank] INTEGER,
[mae] TEXT,
[yoso] TEXT,
[keka] TEXT,
PRIMARY KEY(id)
);
INSERT INTO "HistoricalDate" VALUES(1,2007,9,17,-1,0,'JP','休場(敬老の日)',0,NULL,NULL,NULL);

COMMIT;

SQLの文法が違う(You have an error in your SQL syntax)と言われているので、直す。とりあえず、下記を修正。

・「PRAGMA foreign_keys=OFF;」を削除
・「BEGIN TRANSACTION;」を削除
・create tableで作成するテーブル名を括弧で囲わない
・create tableで作成するテーブルのカラム名を括弧で囲わない
・insert文で指定するテーブル名をダブルクォーテーションで囲わない

実行した結果、成功した。

mysql> source C:\dev\SQLite\EventDateDump.sql
Query OK, 0 rows affected (0.10 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

3.テーブルを確認する
(1)テーブルがcreateされているかの確認。

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| historicaldate |
| sampletbl      |
| test2          |
+----------------+
3 rows in set (0.00 sec)

たしかに、historicaldateテーブルが作成されている。

(2)テーブルのデータの確認
selectで確認する。実行結果を1行ずつ整形された形で見るために、「\G」を付けて実行する。

mysql> select * from historicaldate \G;
*************************** 1. row ***************************
   id: 1
  nen: 2007
 tuki: 9
 niti: 17
   zi: -1
  fun: 0
 kuni: JP
event: 莨大エ・域噴閠√・譌・・
 lank: 0
  mae: NULL
 yoso: NULL
 keka: NULL
1 row in set (0.00 sec)

文字化けしている。
文字化けは次回の課題として、データ投入まで完了。