Nucleus

Nucleus-SQLiteでのEUC-JPからUTF-8への文字コード変更

2009年10月24日

表題のことについてのメモ。

まず、『nucleus/sqlite/.dbsqlite』ファイルのコピーを、バックアップとして取っておく。

SQLiteManagerを立ち上げる。データのExportページにて、

・Structure and Data
・Complete inserts
・send
・CRLF

を選択して、実行(Add "DROP"は選択しない)。

ダウンロードされたファイルをエディタで開き、UTF-8Nに変換した後『dbsqlite-no-drop-utf8.sql』のファイル名で保存。

以下のPHPスクリプトを保存したファイルと同じディレクトリに置き、実行する。

作成された『.dbsqlite』を、『nucleus/sqlite/』ディレクトリに移動する。

Nucleus管理画面グローバル設定にて、使用する言語を『japanese-utf8』に変更する(ただし、古いバージョンのNucleusの場合、UTF8バージョンのものに置き換える必要アリ)。

必要であれば、スキンのメタタグの言語指定を、EUC-JPからUTF-8に変更する。

PHPスクリプト:
<?php

$sqlfile=dirname(__FILE__).'/dbsqlite-no-drop-utf8.sql';
$dest=dirname(__FILE__).'/.dbsqlite';
if (file_exists($dest)) exit("File: '$dest' already exists!");

$textdata=file_get_contents($sqlfile);
if (strlen($textdata)==0) exit("Data not found: '$sqlfile'!");

if (!preg_match_all("/(?:[^';]+|'[^']*?')*;/",$textdata,$m, PREG_PATTERN_ORDER)) exit("Data not found");
$textdata=null;
$arraydata=$m[0];
$m=null;

$db=sqlite_open($dest);

sqlite_query($db,'BEGIN TRANSACTION');
foreach($arraydata as $query) {
    $query=trim($query);
    while(preg_match('/^(?:#[^\r\n]*[\r\n]+)/',$query,$m)) $query=substr($query,strlen($m[0]));
    sqlite_query($db,$query);
}
sqlite_query($db,'COMMIT');


P.S.
 ファイルの大きさの問題なのか、SQLiteManagerのSQLページでは、文字コードをUTF8に変換したsqlファイルを実行することが出来なかった。

コメント

コメントはありません

コメント送信