web-dev-qa-db-ja.com

OracleデータベースでUTF8を使用することの欠点はありますか?

構成済みのOracleデータベースの注文をインストールしていて、どの文字エンコードが必要かを尋ねられます。アプリケーション(Java)は英語のみですが、ユーザーは世界のさまざまな地域から来ています。

UTF8または他のUnicode文字セットを使用しない動機はありますか?

7
user22463

2つの選択肢があります。

  1. データベース文字セットVARCHAR2CHARCLOBデータ型で使用)を選択します。
  2. 国別文字セットNVARCHAR2NCHARNCLOBデータ型で使用)を選択します。

として ここに見られる

すべての新しいシステム展開にはUnicodeを使用することをお勧めします。

国別文字セットはUnicodeのみです:UTF-8またはUTF-16。したがって、両方に同じ文字セットを選択するのは冗長です...

私のアドバイス(あなたのアプリケーションは英語のみであるとあなたは言います):

  • データベースの文字セットをUTF-8にするように依頼します。
  • 国の文字セットをUTF-16にするように依頼します。

そして、これがスキーマ定義に関する私の一般的なアドバイスです。テーブルごと、列ごと(ここでは、VARCHAR2/NVARCHAR2サンプルを取得します):

  • 列にワールド内の任意の文字を含めることができる場合(user inputのように)、NVARCHAR2にします。
  • 何を保存するか(英語の場合)を制御できる場合は、VARCHAR2にします。
6
Mac

しかし気をつけてください:

バージョン8.1.7以前のOracle Databaseクライアントおよびサーバーとの互換性のために必要な場合、またはアプリケーションベンダーから明示的に要求されない限り、データベース文字セットとしてUTF8という名前の文字セットを使用しないでください。非常によく似た名前を持っているにもかかわらず、UTF8はUnicodeエンコーディングUTF-8の適切な実装ではありません。 UTF-8処理が予想される場所でUTF8文字セットを使用すると、データの損失とセキュリティの問題が発生する可能性があります。これは、XMLやURLアドレスなどのWeb関連データに特に当てはまります。

OracleではAL32UTF8を推奨していますデータベースの文字セットとして。 AL32UTF8は、Unicode標準のUTF-8エンコーディングに対するOracleの名前です。

9

UTF8または他のUnicode文字セットを使用しない動機はありますか?

1つだけ。現在の文字セットエンコーディングを保証できない既存のデータセットがあります。

その場合、おそらくそれを修正し、UTF8を使用したいと思うでしょう。

2
Dan Carley

いいえ、まったくありません。

1
Jan Jungnickel

冗談半分:はい、UTFを知らない古いクライアントとはもう接続できません。

0
slovon