



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL Server中的nchar,nvarchar,text,ntext,char,varchar比较参考文献:/mekong/archive/2009/04/17/1437996.html/en-us/library/ms186939.aspx前言这几天在查阅sql server collation的问题,这其中就牵涉到了unicode,non-unicode,varchar,nvarchar,ANSI等字符编码的问题。首先我们讲解一些基础背景知识定长或变长所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;有var前缀的,表示是实际存储空间是变长的,比如varchar,nvarchar变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。Unicode或non-Unicode数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。至于为什么英文字幕是一个字符,占用一个字节,而汉字是两个字符,占用两个字节。这是因为英文字幕只有26个,一个字节有8位,对应着有28=256种编码对应,远大于26,因此可以用一个字节来存储。但是汉字的数量远远大于一个字节所能对应的编码数量,所以必须使用两个字节,也就有了216=65536种编码对应每一个汉字。在unicode字符集中,汉字占了5万多个。字段容量接下来我们看一下char,varchar,nchar和nvarchar能存储多个内容,如下表所示:char,varchar最多8000个英文,4000个汉字nchar,nvarchar可存储4000个字符,无论英文还是汉字分析1:之索引是8000,是因为在sqlserver中一个page是8kb,而用于存储行数据的只有8060字节。这四种数据类型用于修饰表中的一个列,所以列的长度肯定不能大于8060,剩下的60字节具体做什么还不清楚。分析2:varchar是按字节存储的,而nvarchar是按字符存储的 。比如说 , varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节。所以varchar(40)只能存储20个中文字符。nvarchar(40),就可以存储40个中文字符,但是它所占用的存储空间是80字节,但是还是只能存储40个英文字符。实验说明:-实验1:测试nvarchar和varchar的存储长度-创建一个默认collation为Chinese_PRC_CI_AS的数据库TESTDB3USE TESTDB1CREATE TABLE test( lastname NVARCHAR(8) NOT NULL,-nvarchar类型,双字节存储 title VARCHAR(8) NOT NULL, -varchar类型,单字节存储);insert into test values(姓名1,标题1);select * from test;insert into test values(123456789,1);-String or binary data would be truncated.insert into test values(12345678,1);insert into test values(1,12345678);insert into test values(一二三四五六七八,一二三四);select * from test;-总结:/*1.nvarchar(n),按字符来存储,不论是英文字符还是中文字符。最多能够存储n个中文或者是英文,但是所占用的存储空间是2n+2个字节。1=n=40002.varchar(n)按字节存储,最多能够存储n个英文字母,存储n/2个中文字符。但是所占用的存储空间是n个字节。1=n=8000*/CHAR 和 VARCHARCHAR 存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。VARCHAR 存储变长数据,但存储效率没有CHAR高,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+2。为什么+2呢?这一个字节用于保存实际使用了多大的长度。这个可以在MSDN上找到:varchar ( n | max ) Variable-length, non-Unicode string data. n defines the string length and can be a value from 1 through 8,000. max indicates that the maximum storage size is 231-1 bytes (2 GB). The storage size is the actual length of the data entered + 2 bytes. 因此,从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。TEXT、NCHAR、NVARCHAR、NTEXTTEXT text存储可变长度的非Unicode数据,最大长度为231-1(2,147,483,647)个字符,2GB。NCHAR、NVARCHAR、NTEXT 这三种从名字上看比前面三种多了个N。和char、varchar比较起来,nchar、nvarchar最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南省长沙市一中马王堆中学2024-2025学年七年级下学期期末考试英语试卷(无答案)
- 倔强的贝多芬课件
- 伦敦眼课件教学课件
- 四川广元天立学校2025-2026学年高三物理第一学期期末教学质量检测模拟试题
- 2025-2026学年云南省保山一中物理高三第一学期期末学业水平测试试题
- 黑龙江驻村管理办法
- 企业物业人员安全培训课件
- 新质生产力的发展观解读
- 加快科技成果转化培育新质生产力
- 统编版 语文 三年级 上册《一个粗瓷大碗 》教学教案
- 2025至2030年中国绿色船舶行业发展前景预测及投资方向研究报告
- 2025年小学生“学宪法、讲宪法”网络知识竞赛题库及答案
- 2025年银行考试-银行间本币市场交易员资格考试历年参考题库含答案解析(5套典型考题)
- 八师兵团职工考试题库及答案
- 中国糖尿病足诊治指南2024版解读 3
- 2025秋季版《形势与政策》全套教学课件
- 招标货物供货方案(3篇)
- 2024年南昌市公安局招聘省级留置看护辅警考试真题
- 基于视觉的靶场爆轰破片测试方法研究
- 行走的医院培训课件
- 中国结课件劳动
评论
0/150
提交评论