也就是说一个汉字既可以存在varchar中,也可以存在nvarchar中.
那么对于汉字或者Unicode 数据到底存在varchar和nvarchar有什么区别呢?
下面例子说明一下:一个汉字占varchar(2),只占nvarchar(1),而字母只占varchar(1),那么在数据库字段求长度的时候,用varchar你就不一定知道它确切的知道它到底有几个字,如果用nvarchar,那么汉字也是nvarchar(1),字母也是nvarchar(1),那么已经很明显了.
区别2:varchar的检索快于nvarchar

Unicode 数据类型需要相当于非 Unicode   数据类型两倍的存储空间,

1、当使用非unicode时慎用以下这种查询:
            select f from t where f = N'xx'

原因:无法利用到索引,因为数据库会将f先转换到unicode再和N'xx'比较

2、char 和相同长度的varchar处理速度差不多(后面还有说明)

3、varchar的长度不会影响处理速度!!!(看后面解释)

4、索引中列总长度最多支持总为900字节,所以长度大于900的varchar、char和大于450的nvarchar,nchar将无法创建索引

5、text、ntext上是无法创建索引的

6、O/R Mapping中对应实体的属性类型一般是以string居多,用char[]的非常少,所以如果按mapping的合理性来说,可变长度的类型更加吻合

7、一般基础资料表中的name在实际查询中基本上全部是使用like '%xx%'这种方式,而这种方式是无法利用索引的,所以如果对于此种字段,索引建了也白建

8、其它一些像remark的字段则是根本不需要查询的,所以不需要索引

9、varchar的存放和string是一样原理的,即length {block}这种方式,所以varchar的长度和它实际占用空间是无关的

10、对于固定长度的字段,是需要额外空间来存放NULL标识的,所以如果一个char字段中出现非常多的NULL,那么很不幸,你的占用空间比没有NULL的大(但这个大并不是大太多,因为NULL标识是用bit存放的,可是如果你一行中只有你一个NULL需要标识,那么你就白白浪费1byte空间了,罪过罪过!),这时候,你可以使用特殊标识来存放,如:'NV'

11、同上,所以对于这种NULL查询,索引是无法生效的,假如你使用了NULL标识替代的话,那么恭喜你,你可以利用到索引了

12、char和varchar的比较成本是一样的,现在关键就看它们的索引查找的成本了,因为查找策略都一样,因此应该比较谁占用空间小。在存放相同数量的字符情况下,如果数量小,那么char占用长度是小于varchar的,但如果数量稍大,则varchar完全可能小于char,而且要看实际填充数值的充实度,比如说varchar(3)和char(3),那么理论上应该是char快了,但如果是char(10)和varchar(10),充实度只有30%的情况下,理论上就应该是varchar快了。因为varchar需要额外空间存放块长度,所以只要length(1-fillfactor)大于这个存放空间(好像是2字节),那么它就会比相同长度的char快了。

13、nvarchar比varchar要慢上一些,而且对于非unicode字符它会占用双倍的空间,那么这么一种类型推出来是为什么呢?对,就是为了国际化,对于unicode类型的数据,排序规则对它们是不起作用的,而非unicode字符在处理不同语言的数据时,必须指定排序规则才能正常工作,所以n类型就这么一点好处。

字段类型 描述
 bit  0或1的整型数字
 int  从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字
 smallint  从-2^15(-32,768)到2^15(32,767)的整型数字
 tinyint  从0到255的整型数字
   
 decimal  从-10^38到10^38-1的定精度与有效位数的数字
 numeric  decimal的同义词
   
 money  从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十
 smallmoney  从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十
   
 float  从-1.79E+308到1.79E+308可变精度的数字
 real  从-3.04E+38到3.04E+38可变精度的数字
   
 datetime  从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒
 smalldatetime  从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟
   
 timestamp  时间戳,一个数据库宽度的唯一数字
 uniqueidentifier  全球唯一标识符GUID
   
 char  定长非Unicode的字符型数据,最大长度为8000
 varchar  变长非Unicode的字符型数据,最大长度为8000
 text  变长非Unicode的字符型数据,最大长度为2^31-1(2G)
   
 nchar  定长Unicode的字符型数据,最大长度为8000
 nvarchar  变长Unicode的字符型数据,最大长度为8000
 ntext  变长Unicode的字符型数据,最大长度为2^31-1(2G)
   
 binary  定长二进制数据,最大长度为8000
 varbinary  变长二进制数据,最大长度为8000
 image  变长二进制数据,最大长度为2^31-1(2G)

转载于:https://www.cnblogs.com/meiproject/archive/2007/09/29/910350.html

我们需要什么样的字段类型?相关推荐

  1. php数据库字段类型,mysql 字段类型说明

    mysql 字段类型说明 更新时间:2007年04月27日 00:00:00   作者: MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用 ...

  2. mysql 单选字段_mysql字段类型

    学习自 https://www.cnblogs.com/jennyyin/p/7895010.html,感谢原博主的奉献 mysql支持多种类型,大致可以分为三类:数值.字符串.日期/时间. 数值类型 ...

  3. 数据库表(字段类型、约束、截断表、修改表字段、重命名表)

    字段类型: 在这里只列举一些常用的字段类型: 整数类型:int(Integer):普通大小的整数 小数类型: float(m,d):单精度浮点数,m表示数字长度,d表示小数位数,例如float(5,2 ...

  4. 使用 SQL Server 的 uniqueidentifier 字段类型

    原文:使用 SQL Server 的 uniqueidentifier 字段类型 SQL Server 自 2008 版起引入了 uniqueidentifier 字段,它存储的是一个 UUID, 或 ...

  5. Access sql语句创建表及字段类型

    创建一张空表: Sql="Create TABLE [表名]" 创建一张有字段的表: Sql="Create TABLE [表名]([字段名1] MEMO NOT NUL ...

  6. mysql数据库blob区别_MySQL中TEXT与BLOB字段类型的区别

    在MySQL中有两个字段类型容易让人感觉混淆,那就是TEXT与BLOB,特别是自己写博客程序的博主不知道改为自己的博客正文字段选择TEXT还是BLOB类型. 下面给出几点区别: 一.主要差别 TEXT ...

  7. mysql 字段字节_MySql字段类型及字节

    字段类型: TINYINT-----------------一个很小的整数.有符号的范围是-128到127,无符号的范围是0到255. SMALLINT--------------一个小整数.有符号的 ...

  8. sqlserver字段类型详解

    bit    整型  bit数据类型是整型,其值只能是0.1或空值.这种数据类型用于存储只有两种可能值的数据,如Yes 或No.True 或False .On 或Off. 注意:很省空间的一种数据类型 ...

  9. SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理

    原文:SQL Server 字段类型 decimal(18,6)小数点前是几位?记一次数据库SP的BUG处理 SQL Server 字段类型 decimal(18,6)小数点前是几位? 不可否认,这是 ...

  10. SQL语句修改字段类型与第一次SQLServer试验解答

    SQL语句修改字段类型 mysql中 alert table name modify column name type; 例子:修改user表中的name属性类型为varchar(50) alert ...

最新文章

  1. 一文详解缺陷检测相关算法!
  2. mac上的终端bash命令
  3. 微软称HTML5是IE 9的核心 要尽快淘汰IE 6
  4. win7删除桌面文件后手动刷新才会消失的解决方法
  5. Xposed源码剖析——Xposed初始化
  6. 大促密集,CDN如何保障电商体验如丝般顺滑?
  7. 用c语言编写一个2048 游戏,求c语言编写的2048游戏代码,尽量功能完善一些
  8. 程序员面试金典 - 面试题 02.05. 链表求和
  9. 《计算机导论》课程论文,计算机导论课程论文
  10. IE浏览器中Image对象onload失效的解决办法
  11. 洋哥做CTO填过的坑!
  12. 三维地图制作教程,可以用于3D打印
  13. EEGLAB使用流程
  14. 凤凰网php,凤凰网房产频道招聘 web 前端工程师、PHP 工程师 15-25k,欢迎简历来砸~...
  15. Google地图实时轨迹
  16. Boost Asio介绍
  17. 小游戏公司该如何应对网络攻击?
  18. 教师计算机研修培训日志感言,2019年教师研修感言
  19. 【c++】CTGU2022春校赛原题详解--可以冰墩墩一墩难求啊--单调栈
  20. la java va bien口琴谱_口琴曲简谱

热门文章

  1. Asp.net页面之间传递参数的几种方法
  2. d3 svg path添加文本_数据可视化——D3展现数据最炫丽的一面
  3. python sqlalchemy core
  4. html调用一个php文件路径_HTML中利用js调用php的内容
  5. 1018.eclipse工具使用记录
  6. linux网络编程 错误,网络编程的异常及处理
  7. python学得好 牢饭吃的早_关于学习python的几个好习惯?
  8. 数据结构与算法分析(二)——C++实现链表
  9. 信号发送函数sigqueue和信号安装函数sigaction
  10. 嵌入式Linux系统编程学习之六make工程管理和Makefile