SqlServer中的Char、Varchar和Nvarchar详解
来源:互联网 发布:人工智能系统 编辑:程序博客网 时间:2024/06/05 16:35
Char
char是定长的,也就是当你输入的字符小于你指定的数目时,会在后面补空值。比如定义char(10),你输入的字符小于10时,它会再后面补空值。当你输入的字符大于10时,它会截取超出的字符,总之都会占10个字节的空间。char存储定长数据很方便,char字段上的索引效率极高,因为是固定长度,所以速度效率高。一个英文字符占一个字节,一个汉字两个字节。
(由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!)
nvarchar(n)
包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。最多可存储4000个字符,无论英文还是汉字.varchar[(n)]
Varchar
如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 Varchar(10)是最合算的。存储变长数据,所以不以空格填满,但存储效率没有CHAR高。Varchar类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。 最多8000个英文,4000个汉字。
varchar一般适用于英文和数字,Nvarchar适用中文和其他字符。
sqlserver中varchar最大长度是8000,但是可以使用varchar(max),可以达到2G。(解释:数据库文件由区组成的,而区由八个物理上连续的页组成,页是SQL中存储数据的基础单位,数据就记录存在数据页。一个页大小为8K(8192字节),数据库中的数据文件(.mdf 或.ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n 连续编号)。磁盘 I/O 操作在页级执行,也就是说,SQL Server 每次读取或写入数据的最少数据单位是数据页。数据页由页头(96字节),数据行,行偏移量(最少36个字节)三部分组成,所以数据行的最大长度是8x1024-96-36-7=8060,7表示SQL Server还需要对每一行的数据最少附加7字节的系统数据。)
• 比较:
1.定长或变长
所谓定长就是长度固定,当要保存的数据长度不够时将自动在其后面填充英文空格,使长度达到相应的长度;有var前缀的,表示是实际存储空间是动态变化的,比如varchar,nvarchar变长字符数据则不会以空格填充。
2.Unicode或非Unicode
数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。
3.几种数据类型的存储的最大容量
char,varchar 最多8000个英文,4000个汉字
nchar,nvarchar 最多可存储4000个字符,无论英文还是汉字
- SqlServer中的Char、Varchar和Nvarchar详解
- SQLServer中的char、varchar、nchar、nvarchar
- sqlserver中的nvarchar和varchar的区别
- sqlserver中的nvarchar和varchar的区别
- SQLServer中的char、varchar、nchar、nvarchar四种类型
- SQLServer中的char、varchar、nvarchar、text等类型比较
- SQL中的char、varchar、nvarchar
- char、nvarchar和varchar区别
- char、nvarchar和varchar区别
- char、nvarchar和varchar区别
- char、nvarchar和varchar区别
- char、nvarchar和varchar区别
- char、nvarchar和varchar区别
- char、nvarchar和varchar区别
- char、varchar和nvarchar区别
- char,nchar,varchar和nvarchar
- sqlserver char,nchar,varchar,nvarchar区别比较
- sqlserver char nchar varchar nvarchar 的区别
- JAVA环境变量配置
- 30年两组栅格数据对应做减法运算
- spri!gMVC各个Filter的用法!
- Android NDK开发初记
- C++中memcpy和memmove的区别总结
- SqlServer中的Char、Varchar和Nvarchar详解
- 修改数据库表字段
- 获取客户端ip
- 【转】Android sdk content loader 0%的解决方案
- PHP解决中文乱码问题
- Ladrunner 配合 spolight
- 【转载】解决HIS集群系统的性能问题一例
- POJ2407-Relatives(欧拉函数裸题)
- 《九护》一款只专注于老人实时定位的应用