ODBC を使用して、PHP から SQL Server に接続します。PHP では、SQL Server からいくつかの文字列 (nvarchar 列) データを読み取り、それを mysql データベースに挿入したいと考えています。そのような値を mysql データベース テーブルに挿入しようとすると、次の mysql エラーが発生します。
Incorrect string value: '\xB3\xB9ow...' for column 'name' at row 1
すべての ASCII 文字を含む文字列の場合、問題はありませんが、非 ASCII 文字 (一部のヨーロッパ言語) が存在する場合に問題が発生します。
したがって、より一般的に言えば、MS SQL Server データベースには Unicode 文字列があり、PHP によって ODBC 経由で取得されます。次に、mysql データベースに対して実行される sql 挿入クエリに (utf-8 varchar 列の値として) 入れられます。
エンコーディングに関して、この状況で何が起こっているのか誰かが説明してくれますか? どのステップで、どの文字エンコーディング変換が行われる可能性がありますか?
私が使用するのは、PHP 5.2.5、MySQL5.0.45-community-nt、MS Sql Server 2005 です。
PHP はLinuxプラットフォームで実行する必要があります。
更新:この文字列で utf8_encode($s) を呼び出し、その値を mysql 挿入クエリで使用すると、エラーは発生しませんが、挿入された文字列は mysql データベースで正しく表示されません (そのため、utf8 エンコーディングは強制に対してのみ機能します)適切な utf8 文字列ですが、正しい文字が失われます)。