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スクリプト:
P.S.
ファイルの大きさの問題なのか、SQLiteManagerのSQLページでは、文字コードをUTF8に変換したsqlファイルを実行することが出来なかった。
まず、『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ファイルを実行することが出来なかった。