Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー データベース管理 » データベース設定 » 国際言語と文字セット » 国際言語と文字セットのタスク

 

データベースの照合を変更する

 ♦ 照合の変更

データベースの照合を変更するには、データベースを再構築する必要があります。照合はデータベースの作成時に選択されるものであり、変更はできません。

  1. データベースを起動します。

    START databasefile 
  2. 既存のデータベースの文字セットを次のコマンドで確認します。

    SELECT DB_PROPERTY( 'CharSet' );

    SQL Anywhere の初期バージョンでは、このプロパティがない場合があります。文字セットは照合名で判断することもできます。たとえば、照合 1252LATIN1 はコードページ 1252 を使用しています。

    既存のデータベースの文字セットは、データベースの文字セットと同じか、互換性があるはずです。そうでない場合は、データベースの再構築が必要になりますが、再構築のプロセスには細心の注意が必要です。

    特に、使用しているデータベースの照合が 850LATIN1 であり、使用している SQL Anywhere が初期バージョンであるため文字セット変換がサポートされていないか (バージョン 5 以前) デフォルトで無効になっており (バージョン 6 と 7)、クライアントアプリケーションが標準的な Windows アプリケーションの場合、データベースにコードページ 1252 の文字データが含まれている可能性があります (通常はコードページ 850 に含まれる文字データです)。

  3. 以下のように、既存のデータベースに格納されているデータの文字セットを確認します。

    UNLOAD TABLE mytable TO 'mytable_data_in_utf8.dat' ENCODING 'UTF-8';

    メモ帳で結果を確認します。

    アクセント記号付きデータが正しい場合、データベースに含まれている文字データは Windows ANSI コードページに対応しており、英語と西ヨーロッパ言語の場合はコードページ 1252 です。データが DOS ベースのエディターで正常に表示される場合、文字データは Windows OEM コードページに対応しており、通常は 437 または 850 です。

  4. 以下のようにデータベースをアンロードします。

    データの文字セットがデータベースの文字セットと互換性がない場合、文字セット変換なしでデータをアンロードすることが重要です。使用されている SQL Anywhere によっては、dbunload の内部アンロード機能を使用したり、UNLOAD TABLE 文を使用してデータを手動でアンロードしたりできます。

  5. 以下のように新しいデータベースを作成し、使用する照合と文字セットを指定します。

    dbinit -z 1252LATIN1 c:\newdatabase.db 
  6. 以下のように古いデータベースサーバーを停止して、新しいデータベースサーバーを起動します。

    dbeng12 -n new-server c:\newdatabase.db 
  7. データを新しいデータベースにロードします。

    アンロードしたデータとスキーマ (reload.sql) が再ロードに使用するコンピューターの文字セットに対応している場合、dbunload の外部再ロードオプションを使用できます。データは、データベースの正しい文字セットに自動的に変換されます。

    dbunload -ix c:\databasefile

    データのエンコードがデータベースの文字セットと一致してなく、データのロードに LOAD TABLE 文 (内部再ロード) を使用している場合は、ENCODING 句を使用する必要があります。データベースサーバーは、LOAD TABLE 文を使用してロードされたデータに対し、デフォルトでは文字セット変換を実行しません。

    データのエンコードが作業に使用しているコンピューターのコードページと一致せず、ロードに INPUT 文 (外部再ロード) を使用している場合は、ENCODING 句を使用する必要があります。そうしないと、データベースサーバーはデータがコンピューターのネイティブ文字セットであると想定します。

 参照