日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年11月
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

アーカイブ

2010年11月 のアーカイブ

phpのバグ dirname関数は日本語対応未熟(php 5.3)

php6は、正常に動作しましたが

現行のバージョンは以下のコードでエラーが起きます
UTF8の文字に対してdirnameは、問題ないですが
現状 utf8でファイル名を取得できるのか?

// bug: php 5.3.3 , 5.2.14
// (php6:ok)

mb_language("ja");
mb_internal_encoding("SJIS");

$path = "c:\\tmp\\".chr(0x83).chr(0x8b); // japanese common charset (katakana ru)
$file = $path."\\test.txt"; // c:\tmp\ル\test.txt
printf(" \$file : %s\n" , $file);
printf(" dirname(\$file) : %s\n\n" , dirname($file));

if ( strcasecmp($path , dirname($file)) != 0 ) exit(" error : bug\n");

print "ok \n";
?>

» 続きを読む

公式サイトのformatchng.htmlには、2と3は、完全に互換性がないと書いてあります。
ということで、変換が必要になります。

公式サイトから、sqlite.exe sqlite3.exeをダウンロードします
(※sqlite.exe(sqlite-2_8_17.zip): ソース sqlite-2.8.17.tar.gz


コマンドプロンプトなどで
変換するコマンド
直接生成する場合
sqlite.exe old.db .dump | sqlite3.exe new.db

一度テキストに保存したい場合
sqlite.exe old.db .dump > old_db_dump.sql
ここで、必要に応じて、old_db_dump.sqlを修正します
sqlite3.exe new.db < old_db_dump.sql

※問題点
sqlite.exe(2.8.17) のダンプがキーワードをエスケープしない欠陥があるので
定義済みキーワードを使ったテーブル、列名などがある場合、
取り込みでエラーを起こす可能性があります
その場合、一度テキストにダンプして一括修正後、取り込みが必要になります
sqlite3.exeのダンプでは、問題ないようです。

例 sqlite.exe のダンプ: INSERT INTO item VALUES(1);
例 sqlite3.exe のダンプ: INSERT INTO "item" VALUES(1);

例: create table "where" (id text);
INSERT INTO "where" VALUES(1);

追記
sqlite.exe(sqlite 2.8.17)のパッチ

sqlite-2.8.17-47fee16ba9bd8ab2.diff
--- SQLite-47fee16ba9bd8ab2/src/shell.c 2007-01-08 16:20:28.000000000 +0900
+++ SQLite-47fee16ba9bd8ab2/src/shell.c 2010-11-04 23:00:00.000000000 +0900
@@ -421,7 +421,7 @@
p->zDestTable = 0;
}
if( zName==0 ) return;
- needQuote = !isalpha(*zName) && *zName!='_';
+ needQuote = *zName!='_';
for(i=n=0; zName[i]; i++, n++){
if( !isalnum(zName[i]) && zName[i]!='_' ){
needQuote = 1;

追記: 2011.12
バイナリデータを含んでいた場合、DUMPに失敗することがわかりました。
patch2を作りました。
別記事になります。
sqlite patch p2
で検索してください。


PR

[PR]