char和vachar如何根据情况选择才合适
解决方案 »
- 数据递交的问题
- 'CREATE VIEW' 必须是查询批次中的第一个语句。
- 求一SQL较复杂算法
- VC 中利用ADO 访问 SQL server2005 遇到的问题
- insert into scjh_main(cjhbh,cjhr,cjhzq,djhrq,dshrq) values ('001','001','001',2004-06-08 14:33:56 AM,2004-06-08 14:33:56 AM)
- sql2005 reporting service 报表服务能否动态生成列,请指点
- 百思不得其解的java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]无效的光标位置错误
- yangzi(笨笨)请来看
- SQL2000中某个表中记录自动退回到修改前的状态?几天发生一次,delphi+ado ,那错?
- 求帮助,sqlserver字段的一个过滤问题?
- 汇总问题请教
- 如何恢复被删除的记录?
但是,需要2个字节的实际长度信息;另外,处理起来也没固定长度的那么高效了如果一个表已经有一个varchar了,再多几个varchar也不会再降低效率——据说
nchar和nvarchar是unicode,支持多语言,但是占用的空间多一倍
固定长度 (char) 或可变长度 (varchar) 字符数据类型。
char[(n)]
长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。
varchar[(n)]
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。
注释
如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。
将为使用 char 或 varchar 的对象被指派数据库的默认排序规则,除非用 COLLATE 子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。
支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题。如果使用 char 或 varchar:
如果希望列中的数据值大小接近一致,请使用 char。
如果希望列中的数据值大小显著不同,请使用 varchar。
如果执行 CREATE TABLE 或 ALTER TABLE 时 SET ANSI_PADDING 为 OFF,则一个定义为 NULL 的 char 列将被作为 varchar 处理。
当排序规则代码页使用双字节字符时,存储大小仍然为 n 个字节。根据字符串的不同,n 个字节的存储大小可能小于 n 个字符。
declare @text char(6)
set @text = '123'
print @text
--123 "123后面有3个空格"
declare @text char(6)
set @text = '1234567'
print @text
--123456 "只是输出了前6个字符,第7个被丢掉。"
而在用varchar或nvarchar时,结果只是第一种情况时有所不同:
declare @text varchar(6)
set @text = '123'
print @text
--123 "123后面没有其他字符了"
declare @text varchar(6)
set @text = '1234567'
print @text
--123456 "只是输出了前6个字符,第7个被丢掉。"