日期:2014-05-19  浏览次数:20519 次

表字段选用的问题(字段的区别,unicode等编码的区别)
如何正确选用表的字段?什么字段的速度存储读取快些?
varchar非unicode字符,nvarcahr--unicode类型,是那个好些呢?unicode字符存储数据,是不是兼容性最好?
unicode和非unicode它们在数据库中看起来都差不多,可是乱码问题是怎么产生的?
到底是选用nvarchar,nchar这种好,还是怎么样?

问题有点乱,可他们把我的脑子搞的更乱,希望大家不吝指教。

------解决方案--------------------
使用Varchar完全没有问题!速度应比Nvarchar快.
------解决方案--------------------
char 和 varchar 是最常用的两个类型,用吧,没问题
------解决方案--------------------
--字符若有簡繁之分的話,則建議用unicode类型,舉例:
--我的系統是繁體的,當對簡體字操作時就會顯示?等亂碼,為了避免這種情況,就用nvarchar等unicode类型,查詢時前面要加大寫的N,如下:

declare @a table (Month nvarchar(10), type nvarchar(10), [Money] int)
insert @a select '1月 ',N '主板 ',10
union all select '1月 ',N 'CPU ', 20
union all select '3月 ',N '硬盘 ',49
union all select '4月 ', 'CPU ', 11
union all select '5月 ', 'CPU ', 12
union all select '6月 ', 'CPU ', 8
union all select '3月 ',N '硬盘 ',4
union all select '1月 ',N '其它 ',37
union all select '3月 ',N '显示器 ',24


-- type 不固定的话, 用动态语句
declare @s nvarchar(4000)
set @s= ' '
select @s=@s+ ', '+quotename(type)+ '=isnull(sum(case type when N '+quotename(type, ' ' ' ')+ ' then [money] end),0) '
from @a
group by type
ORDER BY SUM([Money]) DESC --加上此句即可

print @s
------解决方案--------------------
楼上说的很好~~
------解决方案--------------------
rockyljt(江濤) 说的没错
如果只是简体中文就不要用nchar,nvarchar,ntext了,毕竟影响效率
------解决方案--------------------
1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
从空间上考虑,用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。

来源:http://hi.baidu.com/wardraq/blog/item/4b3741cbd2206d1ebf09e602.html


具体怎么影响效率,为什么n开头的unicode类型慢?
存储数据的方式,对于相同的数据存储不一样,查询速度可能会有区别。
不管怎么样,重要的一点就是看你实际的需要,来决定使用哪一数据类型。