mikeo_410


MySQLからSQLiteへデーターを移す

 phpMyAdmin で、エクスポートしたSQLを、sqlite コマンドの「.read」で読み込ませました。

1.データベースとテーブルの作成

 エクスポートしたSQLは、テーブルを作成する部分があるのでこの部分を抜き出しておきました。
SQLiteでは、フィールドの属性、制約は使われないのでそのままにします。唯一の例外が、autoincrementが指定してあるフィールドは、INTERGER PRIMARY KEYに置き換えます。

DOS窓で、
sqlite データベース名
とすると、なければ作成されます。

sqlite>.read create.sql
の、ようにしてテーブルをつくりました。

 2.データのインサート

 エクスポート時には、「長いINSERT文を作成する」のチェックをはずしておきます。
「長いINSERT文」は、1つのINSERT文に、valuse()が繰り返しになっているもので、.read は、読み込めませんでした。

エクスポートしたSQLから、INSERT INTO を抜き出します。

アクサングラーブ(バッククオート)が、エラーになるので、アポストロフィー(シングルクオート)に置き換えます。
.read で、読み込みます。

3.改行復帰文字の扱い 

phpMyAdmin は、文字列中の改行復帰を "\n"、"\r" の文字に置き換えます。
sqlite の .read コマンドは、この文字を改行復帰(0x0a,0x0d)に変換しません。
コマンドラインでの入力も同様です。
この変換が必要な場合は、プログラムでSQL文を読み込んで、実行させる以外になさそうです。

試してみます。
まず、テーブル t1 に、フィールド n を 作成します。
'A\nB'
を、INSERT します。

sqlite> create table t1 (n);
sqlite> insert into values ('A\nB');
sqlite> insert into t1 values ('A\nB');
sqlite> .quit

これに、C#のプログラムで、
"X\nY"
を、INSERT します。

SQLite2DB db = new SQLite2DB();
db.Open("test.db");
SQLite2DB.Statement stmt = db.Prepare("insert into t1 (n) values (?);");
db.Execute(stmt, new string[] { "X\nY" });
db.Close();

再度、sqlite を起動して、内容を表示してみます。

sqlite> select * from t1;
A\nB
X
Y

コマンドラインで、INSERT した 'A\nB' は、文字のまま格納され、プログラムからは、改行として記録されました。
この差は、SQLiteではなく、プログラム言語の仕様によって、0x0aに変換されるからです。

コマドラインから、改行を入れる方法は下記のようにする以外はわかりません。(実際に挿入位置で「Enter」を押す。...>とプロンプトが出るので続きを入力する。)

sqlite> insert into t1 values ('W
   ...> Z');
sqlite> select * from t1;
A\nB
X
Y
W
Z
sqlite>


mikeo_410@hotmail.com