varchar型变量,只保存一个汉字的话,为何宽度至少要设成2呢?按理说设成1就行呀?
-----------------
因为底层处理都是按unicode编码进行的呀,对于unicode编码,一个英文和一个汉字都同等对待呀,
可是我试了,确实是必须设成两位才能存放一个汉字,这是为什么呢?
-----------------
因为底层处理都是按unicode编码进行的呀,对于unicode编码,一个英文和一个汉字都同等对待呀,
可是我试了,确实是必须设成两位才能存放一个汉字,这是为什么呢?
select len('字'),datalength('字'),
len('a'),datalength('a')--- ---- --- ---
1 2 1 1
declare @s1 varchar(2)
set @s1='我'
select @s1
select len(@s1)
你用datalength看看
傳回給定的字串運算式之字元數而非位元組數,字串末尾的空白不計。
DATALENGTH
傳回用來代表任何運算式的位元組數目。
len()函数返回的是字符个数,
datalength()函数返回的是字节数。
对于“我”这个字符,就一个字符,所占空间是2个节字。
所以汉字要是定了一个字符varchar(1)他会提示一个。*错误的