■OpenOfficeでクエリの結果が不正です
OpenOfficeバージョン2.3.1+Sqlite3で住所録の管理がうまく行っていたのですが、クエリの結果が不正なことに気づきました。データベースのレコードに「東京都」という都道府県名があるにも関わらず、クエリの条件を「LIKE '東京%'」としてもヒットしません。OpenOfficeのバージョンを最新版の2.4.0に上げるとクエリの結果が不正となるだけでなく、テーブルの表示さえも文字化けするようになりました。原因は文字コードです。Windows2000でOpenOffice、Sqliteを使っていますので、当然文字コードはShift-JISで、SqliteにShift-JISで住所を登録していました。ところがSqliteが扱う文字コードはUTF-8ですので、食い違いが発生するのです。
■SqliteのレコードをUTF-8に変換します
まずShift-JISで入っているSqliteのデータをバックアップします。Sqliteのデータファイル名が「addressbook.db」で、テーブル名が「addressbook」とします。> sqlite3 addressbook.db
sqlite> .output insert_addressbook.sql
sqlite> .dump addressbook
sqlite> .quit
これで「insert_addressbook.sql」というファイルにデータベースの作成から、全データの追加までのSQL文が生成されます。sqlite> .output insert_addressbook.sql
sqlite> .dump addressbook
sqlite> .quit
続いて「insert_addressbook.sql」の文字コードをShift-JISからUTF-8に変換します。サクラエディタなどを使って変換するか、フリーの変換ソフトを利用します。
rubyが利用できるならこんなバッチファイルを作ればいいかも。
sjis2utf8.bat:
@echo off
ruby -e "require 'nkf'; open( '%1' ) do |f| print( NKF.nkf( '-S -w', f.read ) ); end;"
んでもって、コマンドプロンプトでruby -e "require 'nkf'; open( '%1' ) do |f| print( NKF.nkf( '-S -w', f.read ) ); end;"
> sjis2utf8.bat insert_addressbook.sql > utf_insert_addressbook.sql
■新たにSqliteのデータファイルを作成します
上の手順で作成したutf_insert_addressbook.sqlを使って、新しいデータファイルを作成します。SQL文を作成するときに利用したコマンドプロンプトは文字コードがShift-JISですから、コマンドプロンプトの文字コードをUTF-8に変更します。> chcp 65001
次に、SQL文を実行します。> sqlite3 new_addressbook.db < utf_insert_addressbook.sql
これでnew_addressbook.dbというデータファイルができますので、これをユーザDSNに追加して、OpenOffice BaseからODBCで接続すればOKです。