[转]sqlserver 数据类型 及使用考虑
本文转自:http://www.cnblogs.com/auiso/archive/2006/09/02/492796.html
在 Microsoft® SQL Server™ 中,每个列、局部变量、表达式和参数都有一个相关的数据类型,这是指定对象可持有的数据类型(整型、字符、money 等等)的特性。SQL Server 提供系统数据类型集,定义了可与 SQL Server 一起使用的所有数据类型。下面列出系统提供的数据类型集。
可以定义用户定义的数据类型,其是系统提供的数据类型的别名。有关用户定义的数据类型的更多信息,请参见 sp_addtype 和创建用户定义的数据类型。
当两个具有不同数据类型、排序规则、精度、小数位数或长度的表达式通过运算符进行组合时:
- 通过将数据类型的优先顺序规则应用到输入表达式的数据类型来确定所得值的数据类型。有关更多信息,请参见数据类型的优先顺序。
- 如果结果数据类型为 char、varchar、text、nchar、nvarchar 或 ntext,则结果值的排序规则由排序规则的优先顺序规则决定。有关更多信息,请参见排序规则的优先顺序。
- 结果的精度、小数位数及长度取决于输入表达式的精度、小数位数及长度。有关更多信息,请参见精度、小数位数和长度。
SQL Server 为 SQL-92 兼容性提供了数据类型同义词。有关更多信息,请参见数据类型同义词。
精确数字
整数
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。
int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。
smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整数数据。
tinyint
从 0 到 255 的整数数据。
bit
bit
1 或 0 的整数数据。
decimal 和 numeric
decimal
从 -10^38 +1 到 10^38 –1 的固定精度和小数位的数字数据。
numeric
功能上等同于 decimal。
money 和 smallmoney
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.40E + 38 到 3.40E + 38 的浮点精度数字。
datetime 和 smalldatetime
datetime
从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确到百分之三秒(或 3.33 毫秒)。
smalldatetime
从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据,精确到分钟。
字符串
char
固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。
varchar
可变长度的非 Unicode 数据,最长为 8,000 个字符。
text
可变长度的非 Unicode 数据,最大长度为 2^31 - 1 (2,147,483,647) 个字符。
Unicode 字符串
nchar
固定长度的 Unicode 数据,最大长度为 4,000 个字符。
nvarchar
可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于 nvarchar(128),用于引用数据库对象名。
ntext
可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。
二进制字符串
binary
固定长度的二进制数据,其最大长度为 8,000 个字节。
varbinary
可变长度的二进制数据,其最大长度为 8,000 个字节。
image
可变长度的二进制数据,其最大长度为 2^31 - 1 (2,147,483,647) 个字节。
其它数据类型
cursor
游标的引用。
sql_variant
一种存储 SQL Server 支持的各种数据类型(text、ntext、timestamp 和 sql_variant 除外)值的数据类型。
table
一种特殊的数据类型,存储供以后处理的结果集。
timestamp
数据库范围的唯一数字,每次更新行时也进行更新。
uniqueidentifier
全局唯一标识符 (GUID)。
optimize SQLSERVER 3数据类型的考虑
分类:SQLSERVER
l decimal和numeric中尽量选用decimal,numeric只是为了向后兼容。
l bigint,int,smallint,tinyint中
首先int,空间占用合适,运算速度快;(2147,...,...2个多亿)
如果非常在意空间的话,考虑tinyint
超大应用场合,考虑bigint
l money,smallmoney
尽量考虑用decimal替代,原因:性能稍稍好一些;相对其它数据库兼容性好。
money的好处是可以用到某些货币运算函数。
float类型尽量少用,性能不好,精度不高,一般只用于科学计算。
l char,varchar,nchar/nvarchar
char性能好;varchar节省空间;选择方法:10个字节以上的用varchar
n类型的占用空间大,性能低,如果不准备存中文或中亚文字则尽量避免使用。
尤其向类似工号的字段更不要使用n类型,首先它不会存入中文,其次它可能作为索引,此时对性能的影响就更大。
l text/image 考虑到维护方便、效率以及程序开发的方便性,最好不用,即不将其存入数据库中;采用varchar指向其相应的存储路径。
1)char、varchar、text和nchar、nvarchar、ntext
char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
后面三种数据类型和前面的相比,从名称上看只是多了个字母"n",它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。
(2)datetime和smalldatetime
datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。
smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
(3)bitint、int、smallint、tinyint和bit
bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。
int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。
smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。
tinyint:从0到255的整数数据。
bit:1或0的整数数据。
(4)decimal和numeric
这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。
(5)float和real
float:从-1.79^308到1.79^308之间的浮点数字数据。
real:从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real的同义词为float(24)。
[转]sqlserver 数据类型 及使用考虑相关推荐
- SqlServer数据类型
SqlServer数据类型 数据类型的定义,这里就不再说了,具体百度百科里都有详细的说明,数据类型的作用就是帮助我们处理各种各样数据的. SqlServer定义了25中数据类型,每一种类型都有自己特定 ...
- MySQL------MySQL与SQLServer数据类型的转换
MySQL SQLServer
- c#和mysql之间的类型_【SqlServer数据类型、C#数据类型、SqlDbType】对应关系及转换...
// sql server数据类型(如:varchar) // 转换为SqlDbType类型 public static SqlDbType SqlTypeString2SqlType(string ...
- Sqlserver数据类型精解
各数据类型所占尾数,以及取值范围: bit: 1位: 0或1的整型数字 int: 4个字节:从-2^31(-2,147,483,648)到2^31(2,147,483,647 ...
- Oracle和sqlserver数据类型对应
SQL Server 数据类型 Oracle 数据类型 bigint NUMBER(19,0) binary(1-2000) RAW(1-2000) binary(2001-8000) BLOB bi ...
- SQLServer数据类型(一)
一.整数 整数数据类型:包括bigint型.int型.smallint型和tinyint型. 1.bigint型数据的存储大小为8个字节,共64位.其中63位用于表示数值的大小,1位用于表示符号.bi ...
- SQLServer的sql_variant数据类型
sql_variant类型的字段在使用中踩过的坑,总结一下: sql_variant类型的字段如果在select语句上直接使用会导致后台抛错,错误信息如下: com.microsoft.sqlserv ...
- java实体属性对应mysql和SQL Server 和Oracle 数据类型对应
1:Java数据类型与MySql数据类型对照表 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 ...
- 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化
2010-01-12 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化 文章分类:数据库 SqlServer 2k转换为Oracle 10g 列名 SqlServer数 ...
最新文章
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
- 使用ASP.NET Atlas编写显示真实进度的ProgressBar(进度条)控件
- INSTALL_FAILED_MISSING_SHARED_LIBRARY + Installation failed due to: ‘null‘
- 三维重建学习(2):相机标定基础
- linux通过进程名查找进程,Linux下通过进程名获得进程号
- 牛客网《BAT面试算法精品课》学习笔记
- .Net Core2.*学习手册
- strerror和perror函数详解
- selenium.common.exceptions.WebDriverException: Message: ‘chromedriver’解决
- Java排序之直接选择排序
- java 植入 form_pdf form表单制作以及用java程序填充表单
- 「leetcode」108. 构造二叉搜索树【递归】【迭代】详解!
- Linux 镜像文件ISO下载
- 同指数幂相减公式_指数相减.即所以同底数幂的除法法则.PPT
- 51单片机自学--PWM波占空比程序解释
- 手把手教你封装属于自己的Windows7安装镜像
- VMware ESXi 7.0 正式版vSphere7.0官方原版ISO和离线定制包附加vcsa套件
- android主流手机测试,硬件测试哪家强?安卓手机跑分软件横评
- KSO - docker部署Rabbitmq的详细讲解以及各种隐藏坑
- Github:Semantic-Segmentation-Suite分割网络集锦--使用小结