sql里数据类型nchar(10)为什么能存10个汉字, char(10)只能存5个汉字?

括号里的10不都是表示长10个字节吗,而1个汉字占2个字节。... 括号里的10不都是表示长10个字节吗,而1个汉字占2个字节。 展开
 我来答
和洛雨
2019-10-13
知道答主
回答量:1
采纳率:0%
帮助的人:692
展开全部
这个得看你字符是按照什么样的编码规则
1、如果是单字节编码,举个例子ASCII,一个字符(准确来说是英文字符)是用一个字节编码的,而按照ASCII的拓展编码(具体是哪个编码规则忘了,不过可以统称ANSI),一个汉字是用两个字符表示,所以在此编码规则下,存放一个汉字(两个字符)需要两个字节,而char(10)中的10指的是字符个数,而不是多少字节(虽然在这种编码下得到的结果一样,因为一个字符对应一个字节,但是对于双字节编码的不是这样理解的),所以char(10)可以存10个字符,两个个字符表示一个汉字,所以最多存5个汉字。
2、如果是双字节编码,一个字符(这里的字符不仅仅包括英文字符,还包括中文字符即汉字,以及其他的字符)是用两个字节编码的,nchar()存储的是UNICODE字符,它是采用双字节编码规则,即一个字符相当于两个字节,但是nchar(10)其实不需要考虑到字节问题,这个10指的就是字符个数,在此规则下汉字和英文字符一样的性质,所以nchar(10)就能存10个汉字。
总结:发生这样的疑惑主要是,单字节编码没有把汉字等同于一般的字符例如英文字符,而是采用两个一般的字符来表示一个汉字,而双字节编码一视同仁,说到字符就是指所有字符,包括汉字。
micro0369
推荐于2017-09-20 · TA获得超过1.2万个赞
知道大有可为答主
回答量:9250
采纳率:85%
帮助的人:4051万
展开全部
char 和 varchar
固定长度 (char) 或可变长度 (varchar) 字符数据类型

nchar
根据 unicode 标准所进行的定义,用给定整数代码返回 unicode 字符。

char是固定长度的字节,varchar是可变长度的字节,nchar是unicode编码的固定字符长度。
如:12345 在char(6)存储为123456加一个空格,共6个字节。
中国 在char(6)存储为中国加两个空格,共6个字节。
12345 在varchar(6)存储为123456,共5个字节。
中国 在varchar(6)存储为中国,共4个字节。
nchar(6)对汉字和半角字符处理时一样的,即可以存储6个汉字,也可以存储6个字母
追问
【nchar是unicode编码的固定字符长度。】这句是什么意思啊?
追答
nchar是unicode编码字符的。固定式相对 varchar和nvarchar说的。

unicode 用 2个字节来存储 任意个字符(不管是汉字还是半角字母、还是数字1、2、3、4)

而char是用ANSI编码方式来存储字符的,半角字母、数字的一个字符,只占1个字节;而GBK(汉字)的一个字符需要2个字节。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式