SQL字段类型说明
整理一下SQL字段类型,如下:
bit:1位,0或1的整型数字
int:(integer )4字节,从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字
smallint:2字节,从-2^15(-32,768)到2^15(32,767)的整型数字
tinyint:1字节,从0到255的整型数字
decimal(p,s):数字数据,固定精度为p,宽度为s。从-10^38到10^38-1的定精度与有效位数的数字
numeric:decimal的同义词
money:8字节,从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十
smallmoney:4字节,从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十
float(n):n在1~24之间,4字节,7位精度。从-1.79E+308到1.79E+308可变精度的数字
n=1~7为real;
n在25~53之间,8字节,15位精度
real:从-3.04E+38到3.04E+38可变精度的数字
datetime:8字节,从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒
smalldatetime:4字节,从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟
timestamp:8字节,时间戳,一个数据库宽度的唯一数字
uniqueidentifier:16字节,全球唯一标识符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(n):定长二进制数据,最大长度为8000,存储空间为n+4字节
varbinary:变长二进制数据,最大长度为8000
image:变长二进制数据,最大长度为2^31-1(2G)
简 介
MS的SQL Server主要是由五种常常用到的字段,字符型,文本型,数值型,逻辑型,和日期型!许多朋友苦于在一些BBS中ACCESS转换成SQL后字段类型不匹配而不知所措,下面我们就来介绍一些这五种数据类型各自的特性吧!
正 文
[1] 字符型数据Varchar,Char,和nvarchar型
1。char (不带参数)
CHAR的长度是固定的,最长2000个字符。
2。varchar 和 varchar2 (不带参数)
可以肯定的是oracle中目前是可以使用varchar数据类型的,但他们的区别我查了不少资料也没有找到一个准确的答案 最常见的说话是说oracle中的varchar只是varchar2的别名也就是同义词。
其次也有人认为varchar是最大长度为2000的可变字符串(和sql server中的varchar一致),而varchar2最大长度为4000。
知道了他们的特点我们就来讨论下使用区别
1.char和varchar、varchar2
由于varchar和varchar2用途类似,我们先来讨论char和他们的使用区别:
varchar和varchar2比char节省空间,在效率上比char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
varchar和varchar2虽然比char节省空间,但是如果一个varchar和varchar2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用char代替varchar和varchar2会更好一些。
当然还有一种情况就是象身份证这种长度几乎不变的字段可以考虑使用char,以获得更高的效率。
2。varchar和varchar2
这里就进入重点了,前面的区别我们在sql server中我们已经基本了解了,大家可能都知道,最多也就是复习下 ,但oracle增加了一个varchar2类型,是大家以前所没有用到过的。
因为oracle保证在任何版本中该数据类型向上和向下兼容,但不保证varchar,还有其他数据中一般都有varchar这个数据类型。
所以我得出了以下结论:
如果想在oracle新版本的数据库兼容就不要用varchar,如果想和oracle之外其他数据库兼容就不要用varchar2。
nvarchar 和 varchar 的区别是存储方式不同
varchar是按字节存储的.而带"n"的nvarchar是按字符存储的
比如说 varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符.
nvarchar(40),就可以存储40个中文字符,也就是说可以存储80个字节长度的字符.nvarchar要相对于存储的字符类型.比如有些字符是占3个字节的.
同样的,char和nchar也一样道理。
char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值。当你输入的字符大于指定的数时,它会截取超出的字符。
varchar是变长型,它的存储空间会跟你输入的实际字符数而改变,但最大长度不能超过你指定的长度。
nvarchar是unicode的变长型,它和char的区别很明显了,它和varchar的区别主要是存储空间大,相同长度下能容内更多的字符。
字符集是在安装 SQL Server 时选择的,不能更改。使用 Unicode 数据类型,列可存储由 Unicode 标准定义的任何字符,包含由不同字符集定义的所有字符。Unicode 数据类型需要相当于非 Unicode 数据类型两倍的存储空间。
Unicode 数据使用 SQL Server 中的 nchar、varchar 和 ntext 数据类型进行存储。对于存储来源于多种字符集的字符的列,可采用这些数据类型。当列中各项所包含的 Unicode 字符数不同时(至多为 4000),使用 nvarchar 类型。当列中各项为同一固定长度时(至多为 4000 个 Unicode 字符),使用 nchar 类型。当列中任意项超过 4000 个 Unicode字符时,使用 ntext 类型。
nvarchar(n):
包含 n 个字符的可变长度 Unicode 字符数据。n 的值必须介于 1 与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。
varchar[(n)]:
长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。
1.
varchar[(n)]
长度为 n个字节的可变长度且非Unicode的字符数据。n必须是一个介于1 和8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在SQL-92 中的同义词为 char varying 或 characte varying。
nvarchar(n) 包含 n个字符的可变长度Unicode字符数据。n的值必须介于1与 4,000 之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar在SQL-92 中的同义词为national char varying 和national character varying。
n 表示字符个数
nvarchar:
不管是一个字符还是一个汉字,都存为2个字节
varchar:
汉字是2个字节,其他字符存为1个字节
通俗一點就是varchar适合英文和数字,nvarchar一般用做中文或其它語言的輸入,這樣到別的語系不會出現乱码:))
2.
N表示Unicode常量,可以解决多语言字符集之间的转换问题,见联机帮助
[2] 文本型数据Text
文本型数据中你可以存储超过20亿个字符串,怎么样,这个够大了吧?但是也不是任何时候都是和使用文本型数据,因为他非常占空间,也非常消耗服务器,随处乱用后果不堪设想!因为即使你像一个文本型字段输入了一个空值他都会占用2K的空间!而当这时除了删除该数据没有别的办法收回空间!
[3] 数据型数据 Int,Tinying,Numeric
SQL支持多种不同的数据类型,让你可以存储整数,小数,和钱数!
INT(整型数据)表示范围是从-2,147,483,647 到 2,147,483,647 的整数
如果你的数值没有那么长,为了节省内存空间你可以使用SMALLINT它的表示范围是-32768到32768整数!二者的使用方法完全相同!
如果你还想再节省空间你可以选择使用TINYINT他只能存储0到255的整数注意TINYINT不能存储负数,一个TINYINT占用一个字节,而一个INT型数据占用4个字节!
[4] 数据型数据 Bit
网页复选框搜集信息存入数据库,是BIT型最常见的用法了!他只有两个值:0或1
[ 5] 数据型数据 Datetime,Samlldatetime
DATETIME的存储范围是从1753年1月1日第一毫秒到9999年12月31日最后一毫秒,如果你不需要覆盖面这么大的日期范围,可选使用SMALLDATETIME型它的存储范围是从1900年1月1日到2079年6月6日,但是只能精确到秒!
[ 6] 特殊型数据 Cursor
这里包括些2进制数据类型和一些其他不常用到的数据类型,就不再多说了!