0

nvarchar (varchar) は 2 バイトの UNICODE を使用するのに対し、varchar (char) は ASCII 文字を 1 文字あたり 1 ビューで格納するために使用されることをよく読んでいました。
しかし、どのASCII?SSMS 2008 R2 で

DECLARE @temp VARCHAR(3); --CHAR(3)   
SET @temp = 'ЮЯç'; --cyryllic + portuguese-specific letters
select @temp,datalength(@temp) 
-- results in 
-- ЮЯç  3

更新: おっと、結果は本当に ЮЯс でしたが、ЮЯç ではありませんでした。ありがとう、マーティン

4

2 に答える 2

3
declare @table table
(
c1 char(4) collate Cyrillic_General_CS_AI,
c2 char(4) collate Latin1_General_100_CS_AS_WS
)

INSERT INTO @table  VALUES (N'ЮЯçæ', N'ЮЯçæ')

SELECT c1,cast(c1 as binary(4)) as c1bin, c2, cast(c2 as binary(4)) as c2bin
FROM @table

戻り値

c1   c1bin      c2   c2bin
---- ---------- ---- ----------
ЮЯc? 0xDEDF633F ??çæ 0x3F3FE7E6

照合順序によっては、非 ASCII 文字が失われたり、暗黙のうちにほぼ同等の文字に変換されたりする可能性があることがわかります。

于 2010-10-16T19:59:50.793 に答える
1

これは、上位 128 文字 (128-255) を定義するコードページを持つ ASCII です。これは SQL Server の「照合」によって制御され、使用する照合に応じて、「特殊」文字のサブセットを使用できます。

この MSDN ページを参照してください。

于 2010-10-16T19:36:07.413 に答える