変換後の文字セットで文字を表現できない場合は、代わりに置換文字が使用されます。この種の変換は、「損失を伴う」と考えられます。つまり、変換後の文字セットで元の文字を表現できない場合は、その文字が失われます。
また、文字セットによって置換文字が異なる場合があるだけでなく、ある文字セットの置換文字が別の文字セットでは非置換文字であることもあります。1 文字に対して複数の変換が実行されるときには、このことを理解することが重要になります。最終的な文字が、変換後の文字セットで期待される置換文字として表示されない可能性があるためです。
たとえば、クライアントの文字セットが Windows-1252 で、データベースの文字セットが ISO_8859-1:1987 (一部のバージョンの UNIX における米国のデフォルト) であるとします。次に、非 Unicode のクライアント・アプリケーション (たとえば Embedded SQL) がユーロ記号を CHAR、VARCHAR、または LONG VARCHAR カラムに挿入しようとします。この文字は CHAR 文字セットに存在しないため、ISO_8859-1:1987 の置換文字である 0x1A が挿入されます。
同じ ISO_8859-1:1987 置換文字が Unicode としてフェッチされる (たとえば ODBC で SELECT * FROM t
を SQL_C_WCHAR にバインドされたカラムにフェッチする) 場合、この文字は Unicode のコードポイント U+001A になります (Unicode では、コードポイント U+001A はレコード・セパレータ制御文字です)。ただし、Unicode
の置換文字はコードポイント U+FFFD です。この例は、データに置換文字が含まれる場合であっても、複数回の変換が原因で、これらの文字が変換後の文字セットの置換文字に変換されない可能性があることを示しています。
このため、複数の文字セット間で変換を行う場合は、置換文字がどのように使用されるかを理解してテストすることが重要です。
on_charset_conversion_failure オプションを使用すると、文字を変換後の文字セットで表現できない場合の変換時の動作を指定しやすくなることがあります。on_charset_conversion_failure オプション [データベース]を参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |