3

私は新しいデータベース サーバーを準備しています。ここでは、既存の大きな多言語データベースからデータを移行します (ほとんどが英語/フランス語/スペイン語のテキストで、都市名などの他の言語の特殊文字はめったにありません)。これは主に、私と同僚が開発した PHP アプリケーションで使用されます。

すべてのキャラクター セットの問題を理解するのは難しいので、最初から正しい選択をしたいと思います。

私が読んだところによると、すべての Unicode 文字をサポートするには、UTF-8 を使用する必要があります。

私の質問:

  1. UTF-8 を取得するには、MicroSoft SQL Server 2008 でどの文字セット/照合を設定する必要がありますか? Latin1_general_CS_AS は正しい選択ですか?

  2. HTML ページでこのメタを使用する必要がありますか?

    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8">
  3. データベースでサポートできない文字や、何らかの方法で変換する必要のある文字はありますか?

4

2 に答える 2

5

文字セットと照合は別物です。

SQL Server は UTF-8 をサポートしていません。データは Unicode として保存する必要があります。つまり、列の型は および である必要がNCHARありNVARCHARます。任意の照合順序を選択できます。選択した照合順序は正しくないためです。照合は、値が格納されるエンコーディングではなく、値がソートおよび比較される方法を決定します(ドライバーは照合情報を非 Unicode 型のエンコーディング ヒントとして解釈しますが、それは別のトピックです)。さまざまな言語を混在させているため、正しい並べ替え順序はありません (つまり、アプリケーションI悪名高いトルコ語とスペイン語に苦しむことになります)。ch並べ替えの問題)。ただし、これは一般的に大きな問題ではなく、ユーザーが気付くことはめったにありません。ただし、全体としては、ラテン語の照合がおそらく最適です。

返される HTTP 文字セットについては、ページを返すために使用した文字セットを入力する必要があります。SQL Server がデータを格納するために使用するエンコーディングは、まったく関係ありません。多くの開発者は、SQL Server で非 Unicode データ型 (つまり.CHARおよびVARCHAR) を使用しているため、返される HTTP データに多くのエンコーディングの非互換性が生じるため、ここで問題に遭遇します。単純に Unicode 列タイプを使用するだけで、ほとんどの問題は解決しますが、独自のアプリケーション コードで愚かなこと (エンコーディングを強制しようとするなど) を行わない限りは問題ありません。

ところで、ほとんどのアプリケーションが PHP になると述べているので、PHP ではエンコーディングを SQL Server Unicode UCS-2 から目的の出力形式 (UTF-8) に変換する必要がある可能性があります。Microsoft Drivers for PHP for SQL Server Unicode Support and Endiannessを読み、SQL Server データにucs-2leエンコーディングを使用していることを確認してください。

于 2012-10-01T09:46:51.650 に答える
0

SQL_Latin1_General_CP1_CS_AS英語 (米国) ロケールLatin1_General_CS_ASの既定の照合として、および英語 (英国) などの他の英語ロケールの既定の照合として使用します。

于 2012-10-01T09:22:00.447 に答える