首页 新闻 赞助 找找看

汉字和英文在计算机中怎么存储的?存储占多大?

0
悬赏园豆:15 [已解决问题] 解决于 2012-10-03 19:38

常听说一个汉字占两个字节,为什么会占两个字节,英文单词怎么存储?

蒋先生的主页 蒋先生 | 初学一级 | 园豆:144
提问于:2012-08-09 10:42
< >
分享
最佳答案
0

普及字符是如何被存储的。在计算机中,所有数据都是用0和1这样的位来描述。一个字节有8位,因此一个字节最多可以描述256个字符。在欧美国家,比如美国,他们的文字字符主要就是26个字母加上一些特殊符号(+-*/等),用一个字节就可以存储,一个国家使用的所有字符就是一个code page,用一个字节存储字符的code page 叫做single-byte code page。但是在亚洲的一些国家,比如中国,常用汉字有几万个,根本不能用一个字节来表示所有的汉字字符,因此需要用两个字节描述。因为两个字节有16位,最多可以描述65536个字符,足够用来描述所有汉语字符以及常用字符,这些字符也是一个code page,不过是double-byte code page,主要针对的是中国。每个国家都有一个code page来对应所使用的字符。比如欧美国家,他们使用拉丁,虽然a-z这26个字母所对应的二进制在code page中是相同的,但是在重音('é'和'á')方面是不相同的。所以如果code page不同,那么相同的二进制代码所表示出来的字符也可能不相同。如果数据在不同code page的计算机上传输,就需要进行code page的转换,如果接收方的code page上没有定义传输方传送过来的特定字符的二进制位,那么就会出现数据丢失。

上面讲到的这些都是同一个概念,那就是数据库中的collation。正如我们前面提到的,每一个国家可能都有自己的collation,这样的话在信息传输上会非常不方面,涉及到collation转换更是烦上加烦。那么用什么方法解决了。这个时候就出现了unicode。unicode是一个大字符表,将全世界上的所有字符都存在一个2字节的字符表中,并且全世界所有国家字符在字符表上都能找到唯一对应的标号。这样的一个好处就是我们使用了同意的字符表,就不要转换了。坏处是,想abc这样的字符,也要占用两个字节,而不是原来的一个自己。

那么在sqlserver如何表现是unicode,在sqlservr中引入了nvarchar和nchar。比如nchar(10),这样的一个结构最多可以存储10个汉字,也最多只能存储10个英文字母。但是所占用的字节就是20字节。而加入是char(10)的话,没有使用unicode,那么就可以存储10个英文字母,但是最多只能存储5个汉字。

收获园豆:10
xwdreamer | 初学一级 |园豆:144 | 2012-08-17 12:44

赞啊!我只知道一个汉字字符占用两个字节,一个英语字符占用一个字节,没想到这位仁兄知道的这么详细。

lanyefeng2008 | 园豆:20 (初学一级) | 2012-09-07 22:22

@lanyefeng2008: 工作中刚好碰到,所以查了一些资料。

xwdreamer | 园豆:144 (初学一级) | 2012-09-08 01:29
其他回答(4)
0
收获园豆:5
artwl | 园豆:16736 (专家六级) | 2012-08-09 10:47
0

汉字比那个英文字母多太多了。1个字节 255个 根本不够放

chenping2008 | 园豆:9836 (大侠五级) | 2012-08-09 13:47
0

经测试,sqlserver中nvarchar(n),n的数等于存汉字的数等于存字母的数,也就是我说:"今天好热啊啊",nvarchar(6)就能存到,而英文只能存"weather",可见存一句中文大概才能存一个单词.不知道对不对,望知道的分析哈.

蒋先生 | 园豆:144 (初学一级) | 2012-08-15 17:21
0

因此一个字节最多可以描述256个字符  这是什么意思

大脸 | 园豆:202 (菜鸟二级) | 2013-12-19 17:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册