字符是如何被存储的
来源:互联网 发布:webuploader 跨域 php 编辑:程序博客网 时间:2024/06/08 16:08
在计算机中,所有数据都是用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个汉字。
- 字符是如何被存储的
- 字符数组中拷贝多字节的变量后查看是如何来存储的 布局
- 如何判断输入的字符是中英文
- varchar是按字节存储的.而带"n"的nvarchar是按字符存储的
- Git是如何存储对象的
- Java中数组是如何存储的?
- U盘是如何存储数据的?
- Java 浮点数是如何存储的?
- Git是如何存储对象的
- memcache 是如何实现分布式存储的?
- git原理-文件是如何存储的
- 企业库是如何调用存储过程的
- 计算机是如何存储浮点数的
- 计算机磁盘是如何实现存储的?
- 星际文件存储IPFS是如何颠覆云存储的?
- wchar_t是C/C++的字符类型,是一种扩展的存储方式
- 计算机是如何处理按键输入的字符的
- 看源代码学习Session的内容是如何存储的?
- 页面发送http请求方式
- AngularJS系列(五)——下拉框
- 简单组合java.util.Map<K,V>实现Map<K,P,V>
- 百度地图api版本不同,几处不同
- 把数组排成最小的数
- 字符是如何被存储的
- CSDN
- bzoj4985 评分(二分答案+dp)
- Your branch is ahead of 'origin/master' by 1 commit
- 4010: [HNOI2015]菜肴制作
- 业务层刻意抛出异常,全局异常的捕获它并按格式返回
- IntelliJ IDEA导入多个eclipse项目到同一个workspace下
- go web :5 用Interface{}简化对json的处理
- spring注解的使用