2017-06-03 2 views
1

VARCHAR ..に128から255の文字をどのように格納しますか?SQL:VARCHARに拡張ASCII(128から255)を格納する

SQLは、これらのいくつかをchar(63) '?'に変更しているようです。照合と関係があるかどうかわからないのですか? UTF-8? N '..'?私はCOLLATE Latin1_General_Binを試してみましたが、拡張asciiをサポートしているかどうかはわかりません。

明らかにNVARCHARで動作しますが、理論的にはこれもVARCHARでも有効でしょうか?

答えて

3

ASCII 0〜127文字の範囲を超えてvarchar/charカラムに格納されている文字は、照合に関連付けられたコードページによって決まります。コードページで特に定義されていない文字は、類似の文字にエーテルマッピングされています。存在しない場合は '?'です。

あなたは、このクエリに関連付けられたコード・ページと一緒に照合順序を一覧表示することができます。

SELECT name, description, COLLATIONPROPERTY(name, 'CodePage') AS CodePage 
FROM fn_helpcollations(); 
+0

非常に役に立ちます。問題が見つかりました。一部の拡張文字129,141,143,144,157 –

+1

@DaveSumterが欠落しているコードページ1252を使用しているため、代わりにnvarchar/ncharを使用してコードの問題を回避できます。 –

+0

深い洞察力! thx – Shnugo

0

ダンの答えは、ライトトラックに私を得ました。

VARCHARは確実に拡張ASCIIを格納しますが、照合に関連付けられたコードページによって異なります。 157

において、

129、141、143、144:私は、次の文字が未定義され、このコードページによれば、コードページ1252

https://en.wikipedia.org/wiki/Windows-1252

を使用Latin1_General_100_BINを使用してい実際には、SQLのように、ほとんどの文字を128から159に除外しているようです。簡単な解決策は、それらの文字を削除することでした。

+0

右の「拡張ASCII」は、この用語を使用するのに十分ではありません。文字は文字セット内にあります。文字セットには名前があります。 「拡張ASCII」は文字セットの名前ではありません。しかし、あなたの問題は、ソースデータのキャラクタセットを知らないように見えて、それを格納するように設計されていないシステムに格納しようとしていることです。 –

+0

申し訳ありません、トム、同意しないでください。拡張ASCIIはほとんどの人がよく理解している用語です。https://en.wikipedia.org/wiki/Extended_ASCII –

+0

特定の文字セットを保存していません。バイト値を保存しています。 –

関連する問題