有什么区别,建数据库的时候用哪一个好?
解决方案 »
- 如何在update执行之后,获取被更新的值?
- select语句中列调用函数,但是效率很低,如何优化
- c#中使用sql语句类型与.net不匹配的问题
- 数据排序后汇总结果,但没有显示结果
- 有偿咨询SQL SERVER问题,价格由你开
- 还原问题.
- 恳请前辈邦看一下java程序链接MSSQL2000失败的原因,
- 不能在SQL Server 2005 建关系数据库图
- left join的困惑:一旦加上where条件,则显示的结果等于inner join
- 我现在数据库服务器名称是: you name 我想改为:liang 在哪儿改?
- sql2005和sql2008装在同一台服务器上,是谁提供服务呢?
- 求接口联表语句
/*char是固定长度,
varchar是可变长度.
如:
定义为char(8)
插入值的时候,如果不够8个长度,用空格补上~而使用varchar(8),则不用,长度为字符串的实际长度~
*/
视情况而定吧!
固定长度 (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。
varchar[(n)]
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节所输入的数据字符长度可以为零
DECLARE @A VARCHAR(6)
SET @A=''
SELECT LEN(@A)
SET @A='123'
SELECT LEN(@A)
SET @A='12345678'
SELECT @A-----------
0(1 行受影响)
-----------
3(1 行受影响)
------
123456(1 行受影响)
sp_configure 'allow updates','1'
go
reconfigure with override
go
--- update t1 set t1.Xtype=167 and Length=200
from SysColumns t1,SysObjects t2 where t1.Id=t2.Id and t2.Xtype='U' and t1.XType=175
---
go
-- 修改完後再設定不允許修改更新
sp_configure 'allow updates','0'
go
reconfigure with override
2000的話可以這樣來該
varchar是可变长度. 会过滤两端的空格
varchar类型数据是可变长度的。如果存储的数据长度不足指定长度,那么存储实际数据的长度,如果超出指定长度,内容就被截断。
例如:
c1 char(6) set c1 = '123' print c1 结果是:'123 ' 注意有空白
set c1 = '1234567' print c1 结果是:'123456' 被截断c2 varchar(6) set c2 = '123' print c2 结果是:'123' 注意没有空白
set c2 = '1234567' print c2 结果是:'123456' 被截断
2.CHAR的效率比VARCHAR2的效率稍高。
3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
比如char和varchar长度都为10,
但是你插入一个长度为6的字符,如abcdef
如果你选择的是char类型,那么它会在abcdef后面补四个空格,
varchar的不同之处就在于它不会填补空格。
char 对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节
Varchar 的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian"
而char 不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian "(qian后共有96个空格,
就是把它填满为100个字节)。
由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格
去掉!
固定长度 (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。
比如char和varchar长度都为10, 如果你选择的是char类型,那么它会在abcdef后面补四个空格,
varchar的不同之处就在于它不会填补空格。select datalength(cast(''as varchar))
0
select datalength(cast(''as char))
30
vachar 是可变长度所以插入数据的时候会判断数据的长度并去掉多余的空格所以效率相对较低
但是可以节省空间,避免无谓浪费
空间和时间看你选哪个了