Varchar 对每个英文(ASCII)字符都占用2个字节,对一个汉字也只占用两个字节 char 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节 Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian" 而char 不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,就是把它填满为100个字节)。 由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉! 1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。 2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。 修改前(char) 修改后(varchar) 上面两个图是论坛中网友贴出来的,可以看到修改后pw_user“减肥”效果相当明显。 从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。 3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。 4、NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和 char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储 8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。 所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。将所有的表中,数值类型由char,varchar改为nchar,nvarchar 的存储过程 /*--调用示例: exec p_set --*/ if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_set]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_set] GO create procedure p_set as declare tb cursor for Select sql='alter table ['+d.name +'] alter column ['+a.name+'] n' +b.name+'('+cast(a.length*2 as varchar)+')' FROM syscolumns a left join systypes b on a.xtype=b.xusertype inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' where b.name in('char','varchar') and not exists(Select 1 FROM sysobjects where xtype='PK' and name in ( Select name FROM sysindexes Where indid in( Select indid FROM sysindexkeys Where id = a.id AND colid=a.colid ))) --主键不能修改 order by d.name,a.name declare @sql varchar(1000) open tb fetch next from tb into @sql while @@fetch_status = 0 begin exec(@sql) fetch next from tb into @sql end close tb deallocate tb go
分享到:
相关推荐
在SQL Server中,字符数据类型是用来存储文本信息的,包括char、nchar、varchar和nvarchar。这四个数据类型都有各自的特点和用途,下面我们逐一详细分析它们的区别。 1. **char类型**: - char是固定长度的字符...
在SQL Server数据库管理系统中,字符数据类型是存储文本信息的基础,包括`char`、`varchar`、`nchar`和`nvarchar`等几种常见的类型。这些数据类型在存储字符串时有着不同的特性和用途,理解它们之间的区别对于正确...
对于程序中的一般字符串类型的字段,SQL Server中有char、varchar、nchar、nvarchar四种类型来对应,那么这四种类型有什么区别呢,这里做一下对比。 1.定长或变长 所谓定长就是长度固定,当要保存的数据长度不够时将...
nchar_char_varchar与nvarchar有何区别?
### char、varchar、nchar、nvarchar 四种类型的区别 在数据库设计中,选择合适的字段类型对于确保数据的准确性和提高查询效率至关重要。对于字符类型的字段,SQL Server 提供了 `char`、`varchar`、`nchar` 和 `...
本文将详细介绍char、nchar、varchar和nvarchar这四种数据类型的区别以及它们的适用环境。 1. **char**: - char是一种固定长度的非Unicode字符数据类型,长度范围为1到8,000个字节。 - 不论存储的数据实际长度...
- **索引性能**:char和nchar的索引性能优于varchar和nvarchar,但在处理大量数据时,可能需要权衡存储空间和查询速度。 理解这些数据类型之间的差异,有助于我们在设计数据库表结构时做出合理的选择,优化存储和...
您可能感兴趣的文章:sql中varchar和nvarchar的区别与使用方法Sqlserver中char,nchar,varchar与Nvarchar的区别分析基于SQL Server中char,nchar,varchar,nvarchar的使用区别深入char、varchar、text和nchar、nvarchar...
### MSSQL数据库中CHAR、VARCHAR、NCHAR与NVARCHAR的区别 在MSSQL数据库系统中,数据类型的选择对于确保数据的正确存储与高效查询至关重要。本文将详细介绍`CHAR`、`VARCHAR`、`NCHAR`与`NVARCHAR`这四种字符类型...
在SQL中,`varchar`和`nvarchar`是两种常见的字符数据类型,它们分别用于存储非Unicode和Unicode字符数据。理解这两种类型的区别对于数据库设计和优化至关重要。 `varchar(n)`是可变长度的非Unicode字符数据类型,...
因最近自己制作的软件需运行在简繁系统中,但数据库设计时...此脚本可批量处理数据库内所有char和varchar转换为nchar和nvarchar,已集成重建主键,约束,索引,此脚本没有启用事务,运行前请备份原数据库或手动增加事务
一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。 字符数据类型是使用最多的数据类型。它可以用来存储各种字母、数字符号、特殊符号。一般情况下,使用字符类型数据时须在其前后...
综上所述,CHAR和VARCHAR的区别主要在于是否固定长度,而NCHAR和NVARCHAR则是在处理Unicode字符集的基础上,提供了固定和可变长度两种选择。选择合适的数据类型对于优化数据库性能和空间利用至关重要。例如,当存储...
* 存储过程和用户定义函数的所有现有 char、varchar、text、nchar、nvarchar 或 ntext 参数和标量返回值。 * char、varchar、text、nchar、nvarchar 或 ntext 系统数据类型和基于这些系统数据类型的所有用户定义的...
length 是可选参数,用于指定 nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的长度。style 是用于日期格式样式的可选参数,借以将 datetime 或 smalldatetime 数据转换为字符数据。 CAST 和 ...