データベースの照合を変更するには、データベースを再構築する必要があります。照合はデータベースの作成時に選択されるものであり、変更はできません。
データベースを起動します。
START databasefile |
既存のデータベースの文字セットを次のコマンドで確認します。
SELECT DB_PROPERTY( 'CharSet' ); |
SQL Anywhere の初期バージョンでは、このプロパティがない場合があります。文字セットは照合名で判断することもできます。たとえば、照合 1252LATIN1 はコードページ 1252 を使用しています。
既存のデータベースの文字セットは、データベースの文字セットと同じか、互換性があるはずです。そうでない場合は、データベースの再構築が必要になりますが、再構築のプロセスには細心の注意が必要です。
特に、使用しているデータベースの照合が 850LATIN1 であり、使用している SQL Anywhere が初期バージョンであるため文字セット変換がサポートされていないか (バージョン 5 以前) デフォルトで無効になっており (バージョン 6 と 7)、クライアントアプリケーションが標準的な Windows アプリケーションの場合、データベースにコードページ 1252 の文字データが含まれている可能性があります (通常はコードページ 850 に含まれる文字データです)。
以下のように、既存のデータベースに格納されているデータの文字セットを確認します。
UNLOAD TABLE mytable TO 'mytable_data_in_utf8.dat' ENCODING 'UTF-8'; |
メモ帳で結果を確認します。
アクセント記号付きデータが正しい場合、データベースに含まれている文字データは Windows ANSI コードページに対応しており、英語と西ヨーロッパ言語の場合はコードページ 1252 です。データが DOS ベースのエディターで正常に表示される場合、文字データは Windows OEM コードページに対応しており、通常は 437 または 850 です。
以下のようにデータベースをアンロードします。
データの文字セットがデータベースの文字セットと互換性がない場合、文字セット変換なしでデータをアンロードすることが重要です。使用されている SQL Anywhere によっては、dbunload の内部アンロード機能を使用したり、UNLOAD TABLE 文を使用してデータを手動でアンロードしたりできます。
以下のように新しいデータベースを作成し、使用する照合と文字セットを指定します。
dbinit -z 1252LATIN1 c:\newdatabase.db |
以下のように古いデータベースサーバーを停止して、新しいデータベースサーバーを起動します。
dbeng12 -n new-server c:\newdatabase.db |
データを新しいデータベースにロードします。
アンロードしたデータとスキーマ (reload.sql) が再ロードに使用するコンピューターの文字セットに対応している場合、dbunload の外部再ロードオプションを使用できます。データは、データベースの正しい文字セットに自動的に変換されます。
dbunload -ix c:\databasefile |
データのエンコードがデータベースの文字セットと一致してなく、データのロードに LOAD TABLE 文 (内部再ロード) を使用している場合は、ENCODING 句を使用する必要があります。データベースサーバーは、LOAD TABLE 文を使用してロードされたデータに対し、デフォルトでは文字セット変換を実行しません。
データのエンコードが作業に使用しているコンピューターのコードページと一致せず、ロードに INPUT 文 (外部再ロード) を使用している場合は、ENCODING 句を使用する必要があります。そうしないと、データベースサーバーはデータがコンピューターのネイティブ文字セットであると想定します。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |