Sidebar |
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 で検索してください。 |
Sidebar |