MSSQLサーバーがデフォルトでUnicodeデータをVARCHARまたはNVARCHAR列に受け入れるようにするにはどうすればよいですか?
フィールドに配置する文字列の前にNを配置することでそれを実行できることは知っていますが、正直なところ、これは2008年、特にSQLServer2005の使用では少し古風なようです。
MSSQLサーバーがデフォルトでUnicodeデータをVARCHARまたはNVARCHAR列に受け入れるようにするにはどうすればよいですか?
フィールドに配置する文字列の前にNを配置することでそれを実行できることは知っていますが、正直なところ、これは2008年、特にSQLServer2005の使用では少し古風なようです。
構文は、N
SQLServerでUnicode文字列リテラルを指定する方法です。
N'Unicode string'
'ANSI string'
SQL Serverは、可能な場合、列の照合またはデータベースの照合のいずれかを使用して、2つの間で自動変換します。
したがって、文字列リテラルに実際にUnicode文字が含まれていない場合は、N
プレフィックスを指定する必要はありません。
ただし、文字列リテラルにUnicode文字がN
含まれている場合は、プレフィックスを使用する必要があります。
これがWebアプリケーションの場合、おそらくWebサーバーでUTF8をデフォルトのエンコーディングとして使用することができます。そうすれば、ブラウザとの間でやり取りされるすべてのデータはUTF8になり、VARCHARフィールドに挿入できます。UTF8は、Unicodeを認識しないアプリケーションがUTF8を処理できるようにするための優れた方法です。
N'' プレフィックスの必要性を無効にする方法が本当に必要です。「下位互換性のために必要」という議論は、私にはまったく意味がありません。確かに、その動作を古いアプリのデフォルトにしてください。 Oracle と Postgresql では問題にならないのに、SQL Server で Unicode に適応するために、アプリの大部分をいじる必要があることを発見しました。さあ、マイクロソフト!
文字セットの変換が行われない限り、UTF8 コンテンツを MSSQL Server の VARCHAR フィールドに単純に保存できますが、次の点に注意する必要があります。
アプリケーション以外の管理/レポート/データ ツールは、英語以外の文字を理解できません。
名前のリストの並べ替えなどの言語固有の処理は、すべての言語で受け入れられる順序で行われない場合があります。
データの切り捨てに注意する必要があります。通常、マルチバイト UTF8 文字を切り捨てると、関連する文字のデータが破損します。フィールド長を超える場合は、常に入力を拒否する必要があります。
文字セット変換を無効にすることは、あなたが思っているほど簡単ではないかもしれません.クライアントドライバーでオフにしても、クライアントと使用されるRDBMSコードページの間に大きなロケールの違いがあり、即座にデータの破損。
これがすべてだと思うなら、あなたは自分自身をだますことを心配しなければならないでしょう.
要約すると、この道をたどりたくなるかもしれませんが、それは良い考えではありません。マルチバイトになるとコードの変更が必要になります。