別のSQLエンジンで設定できるのと同じように、SQL Server 2005/2008でUTF-8
関連Collations/Charsets
を設定するオプションを直接見つけることができませんが、SQL Server 2005/2008にはありますラテン語とSQLの照合順序のみ。
Win2008 OS上のSQL Serverエンジン(両方のバージョン)2005/2008でこれらの照合順序/文字セットを強制/インストールするオプションはありますか?
いいえ、ありません。 SQL ServerはUTF-8をサポートしていません。
Unicodeデータが必要な場合は、列をnvarchar/ncharとして定義する必要があります。内部的にSQL ServerはこれをUCS-2として保存することに注意してください。
これは MS on Connect から要求されたものであり、 古いKB記事 があることに注意してください。そして、いくつかの情報 このブログでも
UTF-8は文字セットではなくエンコーディングなので、文字セットとしてインストールすることはできません。
Unicodeテキストを保存する場合は、nvarchar
データ型を使用します。
UTF-8を使用してエンコードされたテキストを保存する場合は、バイナリデータ(varbinary
)として保存します。
SQL Server 2019(現在はベータ版/「コミュニティテクノロジープレビュー」)から、新しい一連のUTF-8照合を介したUTF-8のネイティブサポートがあります。 HOWEVER、UTF-8を使用する機能があればできませんする必要があることを意味します。 UTF-8の使用には、次のような明確な欠点があります。
NVARCHAR
を使用した場合と比べて領域を節約できませんNVARCHAR
の同じ文字よりも。それが実際に降りてくるのはこれです:UTF-8は、8ビットシステムを有効にするストレージ形式の設計です(通常、ASCIIおよびASCII拡張-コードページ)何かを壊したり、既存のファイルの変更を必要とせずにUnicodeを使用して実行を継続します。UTF-8はファイルシステムとネットワークにとって素晴らしいですが、データは内部SQL Serverはどちらでもありません。標準ASCIIの範囲内にあるほとんど(または完全に)たまたまあるデータという事実は、 UTF-16/NVARCHAR
として保存された場合の同じデータよりもスペースは副作用です。確かに、これは有用であると証明できる副作用ですが、その決定は両方のデータを理解している人が行う必要がありますおよびこの決定の結果/欠点これは一般的な使用のための機能ではありません。
また、(SQL Serverでの)UTF-8の主なユースケースは、すでにUTF-8を使用しているアプリコードであり、おそらくそれをサポートする別のRDBMSですでに使用されており、アプリコード/ DBスキーマを更新する欲求や機能はありませんNVARCHAR
データ型(テーブル、変数、パラメーターなどの場合)を使用するか、文字列リテラルの前に大文字の「N」を付けます。目標は、UTF-8が存在する理由と同じです。全体的な構造を変更したり、存在データを無効にしたりせずに、アプリのコードでUnicodeを使用できるようにします。これがあなたの状況を説明している場合は、UTF-8を使用してください。ただし、まだいくつかのバグ/問題があることに注意してください。
NVARCHAR
または大文字の "N"プレフィックス付き文字列リテラルを使用せずにUnicodeが機能する必要がない場合、UTF-8が役立つ他の唯一のシナリオは、LOTがmostly標準ASCII Unicode文字を許可する必要があるデータであり、NVARCHAR(MAX)
を使用している(つまり、データ圧縮は行われません)作業)、そしてテーブルは頻繁に更新されます(したがって、クラスター化列ストアインデックスはおそらく役に立ちません)。
詳細については、私の投稿を参照してください:
私の場合、アラビア文字を表示する必要があり、私の開発データベースは2014年でした。ここでは、クエリでアラビア語の文字が表示され、照合順序はSQL_Latin1_General_CP1256_CI_ASでした
しかし、私の制作はSQL Server 2008で行われ、最終的にはUTF-8文字セットをサポートしていませんでした。ここでは、すべての??????????? SQL 2008ではUTF-8がサポートされていないため。
私がしたことはすべてのvarcharをnvarcharに変更したことであり、アラビア語のcharを正しく表示できました。また、2008年のデータベース照合をSQL_Latin1_General_CP1256_CI_ASに変更します