转自:http://blog.csdn.net/a11112244444/article/details/51475107

首先介绍一下定长或变长

所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;有var前缀的,表示是实际存储空间是变长的,比如varchar,nvarchar变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。

举例:用varchar(5)存储字符串“abc”,只占用3个字节的存储空间,而用char(5)存储,则占用5个字节(“abc  ”)

nvarchar(6),最多能存储6个字符/中文数据,比如:"哈哈哈哈哈哈",“abcdef”......

再介绍一下Unicode或非Unicode

数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。

Ps:VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度

总结:

从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar

char和varchar的性能差距是很小的,可以考虑忽略不计。

在大数据量应用中,使用char和nvarchar有可能导致大量的存储空间的浪费。

(最后一句有误?)

最新文章

  1. python嵌套函数、闭包与decorator
  2. js 爱恨情仇说 this
  3. MySQL 服务无法启动。服务没有报告任何错误。
  4. c#读取快递100查询返回的JSON信息
  5. fgets和fputs函数
  6. 面向.Net程序员的后端性能优化实战
  7. swift:入门知识之控制流
  8. lcov收集覆盖率
  9. Json概述以及python对json的相关操作《转》
  10. CentOS 7下安装xampp和testlink
  11. ChromiumFX中js调用C#方法
  12. redis新手入门,摸不着头脑可以看看<二>
  13. 重置winsock目录解决不能上网的问题
  14. Python并发编程之深入理解yield from语法(八)
  15. Python3学习笔记(urllib模块的使用)
  16. linux 中 修改权限的命令 chmod
  17. Java基础系列--instanceof关键字
  18. hiredis 使用 linux c++
  19. Cockpit subscriptions on CentOS 7 - This system is not registered with an entitlement server. You can use subscription-manager to register.
  20. Spring AMQP 源码分析 01 - Impatient

热门文章

  1. BurpStuite使用技巧
  2. FFmpeg X264的preset和tune
  3. RF判断列表、字典、整数、字符串类型是否相同方法
  4. Django 添加应用
  5. MD5加密与base64编码
  6. 关于RabbitMQ交换机的理解
  7. rabbitmq queue_declare arguments参数注释
  8. .net 取得类的属性、方法、成员及通过属性名取得属性值
  9. Python学习(25):Python执行环境
  10. StarUML2 建模工具全平台破解及license验证简要分析