sqlite.exe .dumpで文字化け 【& patch p2 編】
カテゴリー: ぷろぐらみんぐ/データベース
2011-12-09
sqlite.exe .dumpで文字化け 【& patch p2 編】
概要
・sqlite.exe の dumpにHEXモードを追加する方法
・sqlite の 「dump」と「インポート」の仕方
・sqlite の構築の仕方
・php PDO sqlite versionの自動選択手法
・ソースコードのダウンロード先
sqlite3に完全移行していたつもりだったのですが
今回、サーバーのDBファイルがあちこちのフォルダに散らばっているため
保存先を統一して整理した結果
version3シリーズへの移行をしていないデータがいくつかありました。
そして dumpすると ビープ音 ビ ビー。
インポートも書式エラーでできない始末。
もー、出力をエスケープしていないようです。
sqlite3に移行するのが目的なので、強引に HEXモードを加えました。
一緒に前回(昨年のパッチ1、set_table_name関数)の修正も入っています
sqlite3.exeの .dumpでは、BLOB型にしていれば、HEX出力されるようです。
とりあえず、
1個のDBを移行するのに使うだけで、
cygwinで動いて 、無事に移行できたのでよしとします。
【修正コード】
コードを使う際は、利用者の自己責任でのみご利用できます。
利用前に コードが安全かどうか、ご自分で確認をお願いします。
また、操作していたアプリケーション固有のエンコード・デコード方式があったりして、
dumpにより データが壊れる可能性がありますので、ご注意ください。
phpのデコード方式には対応したつもりですが、ご自分で確認をお願いします。
※移行した際は、旧DBと新しいDBのデータを完全照合するなどして、
データが破損したりしていないか確認をしましょう。
※万が一のため、移行前のDBも保管しておくことをお勧めします。
ファイルは、
こちらに置いておきます。
↓↓↓
↑↑↑
リンク切れの際は、下のコードをどうぞ。
パッチの当てかた、ソースのルートフォルダで
patch -p1 -i SQLite-47fee16ba9bd8ab2-p2.diff.txt
【構築(ビルド、コンパイル)のメモ】
バージョンの確認方法
2.8.17-p2 と表示されれば OK.
※sqlite3の./configureは、上のオプションの文字列が違うので
注意してください。
【dumpメモ】
・sqlite2をファイルにダンプする
./sqlite old-sqlite.db .dump > old-sqlite.sql.txt
・エラーが多くてインポートログをとりたい場合
sqlite3 new-sqlite.db < old-sqlite.sql.txt > new-sqlite-inport-log.txt 2<&1
・直接新しいDBに流し込みたい場合
./sqlite old-sqlite.db .dump | sqlite3 new-sqlite.db
【その他のメモ】
compile.htmlには、
sqlite3コンパイル時に
SQLITE_OMIT_BLOB_LITERALが定義されていると
X'ABCD' 書式が使えないとあります。
【db自動判別メモ】
移行期間中だけ、コードに組み込むことで、エラーをはかずに済みます。
後々のためにsqlite3も判定にいれています。
【ソースの場所】 ソースコードのダウンロード先
3.xは、公式サイトで 普通に配られています。
ログによると ソースの管理は、
cvsから Fossilというシステムに移行したそうです。
2009 Sep 11 (3.6.18): http://www.sqlite.org/changes.html
2.xのコードは、
http://www.sqlite.org/sqlite-source-2_8_17.zip
か
http://www.sqlite.org/download.html
の Branches → version_2 をクリックしてダウンロードする
version_2: http://www.sqlite.org/cgi/src/timeline?r=version_2
上記の方法でリンク切れの際は、自力で探してください。
その他のソースを探す方法
・つついてみる
ローカルにストックしてあるファイル名は下記なので
そのファイル名で公式サイトのurlをつついてみる。
sqlite-source-2_8_17.zip
sqlite-2_8_17.zip
sqlitedll-2_8_17.zip
sqlite_analyzer-2.8.16.bin.gz
sqlite-2.8.17.bin.gz
・unixなどのリポジトリからソースrpm,tarを展開して取り出す
執筆:2011.12.09
編集:2011.12.10
編集:2011.12.10
概要
・sqlite.exe の dumpにHEXモードを追加する方法
・sqlite の 「dump」と「インポート」の仕方
・sqlite の構築の仕方
・php PDO sqlite versionの自動選択手法
・ソースコードのダウンロード先
sqlite3に完全移行していたつもりだったのですが
今回、サーバーのDBファイルがあちこちのフォルダに散らばっているため
保存先を統一して整理した結果
version3シリーズへの移行をしていないデータがいくつかありました。
そして dumpすると ビープ音 ビ ビー。
インポートも書式エラーでできない始末。
もー、出力をエスケープしていないようです。
sqlite3に移行するのが目的なので、強引に HEXモードを加えました。
一緒に前回(昨年のパッチ1、set_table_name関数)の修正も入っています
sqlite3.exeの .dumpでは、BLOB型にしていれば、HEX出力されるようです。
とりあえず、
1個のDBを移行するのに使うだけで、
cygwinで動いて 、無事に移行できたのでよしとします。
【修正コード】
コードを使う際は、利用者の自己責任でのみご利用できます。
利用前に コードが安全かどうか、ご自分で確認をお願いします。
また、操作していたアプリケーション固有のエンコード・デコード方式があったりして、
dumpにより データが壊れる可能性がありますので、ご注意ください。
phpのデコード方式には対応したつもりですが、ご自分で確認をお願いします。
※移行した際は、旧DBと新しいDBのデータを完全照合するなどして、
データが破損したりしていないか確認をしましょう。
※万が一のため、移行前のDBも保管しておくことをお勧めします。
ファイルは、
こちらに置いておきます。
↓↓↓
↑↑↑
リンク切れの際は、下のコードをどうぞ。
sqlite version 2.8x.の修正 |
--- SQLite-47fee16ba9bd8ab2/VERSION 2007-01-09 01:20:28.000000000 +0900 |
パッチの当てかた、ソースのルートフォルダで
patch -p1 -i SQLite-47fee16ba9bd8ab2-p2.diff.txt
【構築(ビルド、コンパイル)のメモ】
cygwin , Linux | |
./configure \ --enable-utf8 \ --enable-tempdb-in-ram make |
|
FreeBSD |
|
./configure --prefix=$HOME/local/sqlite2 \ --enable-utf8 \ --enable-tempdb-in-ram \ --enable-static gmake |
|
FreeBSD-mingw : need gcc + mingw package | |
途中でエラー:うまく構築できないので、詳細不明。 | |
chmod 700 ./configure |
|
checking for a BSD-compatible install... /usr/bin/install -c Version set to 2.8.17-p2 checking for mingw32-gcc... (cached) mingw32-gcc checking whether we are using the GNU C compiler... (cached) yes checking whether mingw32-gcc accepts -g... (cached) yes checking for mingw32-gcc option to accept ANSI C... (cached) none needed configure: error: unable to find a compiler for building build tools |
Windows | sqlite.exe -version |
Unix | ./sqlite -version |
※sqlite3の./configureは、上のオプションの文字列が違うので
注意してください。
./configure の違い | |
sqlite2 | sqlite3 |
--enable-tempdb-in-ram | --enable-tempstore |
--enable-utf8 |
【dumpメモ】
・sqlite2をファイルにダンプする
./sqlite old-sqlite.db .dump > old-sqlite.sql.txt
・エラーが多くてインポートログをとりたい場合
sqlite3 new-sqlite.db < old-sqlite.sql.txt > new-sqlite-inport-log.txt 2<&1
・直接新しいDBに流し込みたい場合
./sqlite old-sqlite.db .dump | sqlite3 new-sqlite.db
【その他のメモ】
compile.htmlには、
sqlite3コンパイル時に
SQLITE_OMIT_BLOB_LITERALが定義されていると
X'ABCD' 書式が使えないとあります。
【db自動判別メモ】
移行期間中だけ、コードに組み込むことで、エラーをはかずに済みます。
後々のためにsqlite3も判定にいれています。
php(PDO) で開く前に sqliteのバージョンを自動判別する方法 |
$dsn = 'sqlite:'.$db_name; |
【ソースの場所】 ソースコードのダウンロード先
3.xは、公式サイトで 普通に配られています。
ログによると ソースの管理は、
cvsから Fossilというシステムに移行したそうです。
2009 Sep 11 (3.6.18): http://www.sqlite.org/changes.html
2.xのコードは、
http://www.sqlite.org/sqlite-source-2_8_17.zip
か
http://www.sqlite.org/download.html
の Branches → version_2 をクリックしてダウンロードする
version_2: http://www.sqlite.org/cgi/src/timeline?r=version_2
上記の方法でリンク切れの際は、自力で探してください。
その他のソースを探す方法
・つついてみる
ローカルにストックしてあるファイル名は下記なので
そのファイル名で公式サイトのurlをつついてみる。
sqlite-source-2_8_17.zip
sqlite-2_8_17.zip
sqlitedll-2_8_17.zip
sqlite_analyzer-2.8.16.bin.gz
sqlite-2.8.17.bin.gz
・unixなどのリポジトリからソースrpm,tarを展開して取り出す