つまり、BOM 形式のエンコーディングがあるか、BOM 形式のエンコーディングがありません。
ファイルの内容を見ると、違いはわかりません。例として、次のファイル (schema.sqlite.sql) の内容を見てみましょう:
schema.sqlite.sql
コードをコピー コードは次のとおりです:
CREATE TABLE guestbook (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
email VARCHAR(32) NOT NULL DEFAULT 'noemail@test.com',
comment TEXT NULL,
created DATETIME NOT NULL
);
CREATE INDEX "id" ON "guestbook" ("id ");
ファイルのサイズは、署名なしで 232 バイト、署名ありで 235 バイトです。
UTF8 署名には 3 バイト (内容: EFBBBF) があり、ファイルが UTF8 でエンコードされていることをソフトウェアに伝えるために特に使用されます。
通常の状況では、署名の有無は問題にはなりません。エディタやその他のソフトウェアはテキストの内容に基づいて UTF8 であるかどうかを推測できるからです。
しかし、場合によっては、異議申し立て書類など、依然として問題が発生する可能性があります。このファイルは SQL ステートメント ファイルです。プログラムは次のステートメント (php) を通じて SQL を実行する必要があります。
コードをコピーします コードは次のとおりです。
$schemaSql = file_get_contents(dirname(__FILE__) . '/schema.sqlite.sql');
$dbAdapter->getConnection()->exec($schemaSql); 🎜>
この場合、「UTF8 署名に使用される 3 バイト」が実際にはファイルの先頭にあるため、署名のあるファイルは問題を引き起こします。その結果、上記のステートメントは正常に実行できません。
解決策も非常に簡単で、ファイルの UTF8 署名を削除するだけです。
もちろん、上記のファイルの内容は実際にはシングルバイトなので、UTF8 エンコーディングで保存する必要はありません。
補足: シングルバイトのコンテンツを含むファイルが UTF8 署名付きで追加されない限り、ファイルを再度開いたときにシステムのデフォルトのエンコーディングが使用されます。