【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)
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)
文字化けしている。
文字化けは次回の課題として、データ投入まで完了。