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

SAP Sybase SQL Anywhere 16.0 » SQL Anywhere サーバ データベース管理 » データベース設定 » 国際言語と文字セット » 照合

 

データベースの照合の変更

選択した照合へのアンロードおよび再ロードを実行することで、ある照合から別の照合へ、データベースの照合を変更できます。照合はデータベースの作成時に選択されるものであり、データベースを再構築せずに変更することはできません。

前提条件

SELECT ANY TABLE および SERVER OPERATOR システム権限が必要です。

デフォルトでは、UNLOAD 文を実行するには SELECT ANY TABLE システム権限が必要です。-gl データベースサーバオプションを使用すると、必要な権限を変更できます。

 ♦ タスク
  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. 新しいデータベースを作成し、使用する照合と文字セットを指定し、DBA ユーザ ID とパスワードを DBA および SQL に設定します。

    dbinit -dba DBA,sql -z 1252LATIN1 c:\newdatabase.db 
  6. 古いデータベースサーバを停止して、新しいデータベースサーバを起動します。

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

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

    dbunload -ix c:\databasefile

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

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

結果

新しい照合でデータベースが再作成されます。

たとえば、照合 ISO1LATIN1 のデータベースがあるが、ユーロ通貨記号をサポートする必要があることに気付いたとします。ISO1LATIN1 はユーロ通貨記号をサポートしませんが、1252LATIN1 のように他のヨーロッパ言語文字セットはサポートするため、データベースをアンロードし、1252LATIN1 の新しいデータベースを作成し、そのデータベースを再ロードします。

[external link] Changing the Collation and Codepage When Rebuilding a SQL Anywhere Database を参照してください。


 参照