热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库几个字段类型的区别

char、varchar、nchar、nvarchar的区别对于程序中的string型字段,SQLServer中有char、varchar、nchar、nvarchar四种类型来对应(暂时不考虑text和ntext),开建立数据库中,对这四种类型往往比较模糊,这里做一下对比。定长或变长:所谓定长就是长度固定

char、varchar、nchar、nvarchar的区别 对于程序中的string型字段,SQLServer中有char、varchar、nchar、nvarchar四种类型来对应(暂时不考虑text和ntext),开建立数据库中,对这四种类型往往比较模糊,这里做一下对比。 定长或变长:所谓定长就是长度固定

char、varchar、nchar、nvarchar的区别

对于程序中的string型字段,SQLServer中有char、varchar、nchar、nvarchar四种类型来对应(暂时不考虑text和ntext),开建立数据库中,对这四种类型往往比较模糊,这里做一下对比。

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

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

基于以上两点来看看字段容量:

  • char,varchar 最多8000个英文,4000个汉字
  • nchar,nvarchar 可存储4000个字符,无论英文还是汉字

使用(个人偏好) :如果数据量非常大,又能100%确定长度且保存只是ansi字符,那么char;能确定长度又不一定是ansi字符或者,那么用nchar;?对于超大数据,如文章内容,使用nText;其他的通用nvarchar。

char、varchar、nchar、nvarchar特点比较如下。

CHAR:CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。

VARCHAR:存储变长数据,但存储效率没有CHAR高,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

TEXT:text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

NCHAR、NVARCHAR、NTEXT:这三种从名字上看比前面三种多了个"N"。和char、varchar比较起来,nchar、nvarchar最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar。

数据库的 int,smallint,tinyint的区别

Unicode 规格通过采用两个字节编码每个字符使这个问题迎刃而解。转换最通用商业语言的单一规格具有足够多的 2 字节的模式 (65,536)。因为所有的 Unicode 系统均一致地采用同样的位模式来代表所有的字符,所以当从一个系统转到另一个系统时,将不会存在未正确转换字符的问题。通过在整个系统中使用 Unicode 数据类型,可尽量减少字符转换问题。 Unicode 数据使用 SQL Server 中的 nchar、varchar 和 ntext 数据类型进行存储。

  • bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
  • int 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。
  • smallint 从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。
  • tinyint 从 0 到 255 的整型数据。存储大小为 1 字节。

date,datetime,timestamp 的区别

  • date 表示年月日,如YY-MM-DD
  • datetime 表示年月日和时间信息,如YY-MM-DD HH:MM:SS
  • datestamp 和datetime表示的信息相同,但时间范围不同

时间范围:

  • date -- > '1000-01-01' to '9999-12-31'.
  • datetime --> '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.
  • datestamp -- > '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC

储存设置:

timestamp

  1. 4个字节储存(Time stamp value is stored in 4 bytes)
  2. 值以UTC格式保存( it stores the number of milliseconds)
  3. 时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。

datetime

  1. 8个字节储存(8 bytes storage)
  2. 实际格式储存(Just stores what you have stored and retrieves the same thing which you have stored.)
  3. 与时区无关(It has nothing to deal with the TIMEZONE and Conversion.)

推荐阅读
author-avatar
灬耗丨子灬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有