数据库几个字段类型的区别
2011-08-23 00:00
323 查看
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-DDdatetime 表示年月日和时间信息,如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
4个字节储存(Time stamp value is stored in 4 bytes)
值以UTC格式保存( it stores the number of milliseconds)
时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
datetime
8个字节储存(8 bytes storage)
实际格式储存(Just stores what you have stored and retrieves the same thing which you have stored.)
与时区无关(It has nothing to deal with the TIMEZONE and Conversion.)
相关文章推荐
- 数据库字段short与Short类型区别
- 数据库字段几个容易记混淆的类型
- 数据库字段类型中char和Varchar区别
- MySQL 数据库中的字段类型 varchar 和 char 的主要区别是什么?哪 种字段的查找效率要高,为什么?
- 数据库中字段类型nvarchar和varchar的区别
- 数据库几个字符类型区别
- 数据库里面几个字符类型的区别
- C# 与数据库中字段类型 Int16(short), Int32(int), Int64(long)的取值范围、区别 。string长度
- 更改数据库中所有表中所有相同字段的长度或数据类型
- Oracle 修改数据库字段的类型的语句
- C# 获取数据库字段类型
- MSSQL数据库的字段类型总结
- 数据库设计中,日期字段的类型应该如何选择?
- 数据库中字段类型对应的C#中的数据类型
- 数据库中存储日期的字段类型到底应该用varchar还是datetime
- 关于数据库设计字段类型和长度的讨论
- 常见数据库字段类型与java.sql.Types的对应
- 数据库获取所有的表,所有的视图,字段说明,字段类型,字段名
- java中常见数据库字段类型与java.sql.Types的对应
- java的UUID类型字段,如何通过jdbc进行数据库的CRUD