2008年04月26日

OpenOfficeとSqlite3

■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文が生成されます。

続いて「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;"
んでもって、コマンドプロンプトで
> 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です。
posted by ピカリ入道 at 19:27| Comment(0) | TrackBack(0) | コンピュータ
この記事へのコメント

この記事へのトラックバック