资料库 SQL Data Types 资料型别

资料库型别是指定物件所能保留之资料类型的属性 SQL Server 提供系统资料型别,定义可与 SQL Server 搭配使用的所有资料类型。也可以在 Transact-SQL 或 Microsoft .NET Framework 中定义自己的资料型别。系统资料型别可以分为例如整数、字元、日期和时间等。选择合适的资料型别可以提高资料库的效能。在建立资料表或变数时,须指定每个栏位或变数的资料类型,并根据需要设定长度、精确度或小数位数等参数。SQL Server (Transact-SQL) 基本几种资料型别,资料类型指定物件所能保留之资料类型的属性。类型包括精确位数用于储存整数或固定小数位数的数值、整数、浮点数、Unicode 字元字串中文、日文或阿拉伯文、varchar 文字或字元资料、Timestamp 日期和时间资料、金融货币精确数值资料、二进位字串用于储存二进位格式的资料,例如图片、文件或加密金钥等等。

数值资料 (Numeric Data)

数值型态有 integer, float, money 使用数值资料能够搭配内建的数值函数来做资料处理该数值栏位。

字串(元)资料 (Character & Strings Data)

储存字元或符号之资料型别。

日期/时间资料 (Date Data)

记录日期/时间的资料型别,类型 Date, Time, Timestamp

布林值 (Boolean Data)

True、False, Yes、No, 1、0



Integer 整数资料

资料型别位元组资料范围
Tinyint1 位元组 (Byte)0 ~ 255
Smallint2 位元组 (Byte)-2^15 (-32,768) 到 2^15-1 (32,767)
Int4 位元组 (Byte)-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647)
Bigint8 位元组 (Byte)-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)
大于 2,147,483,647 的整数常数会转换
decimal 资料类型,而不是 bigint 资料类型。
Bit1 位元组 (Byte)0 , 1 , Null
字串值 True 和 False 可以转换成 bit 值
True 转换成 1
False 转换成 0。


Float 精确位数与浮点数

资料型别位元组资料范围
float8 位元组 (Byte)-1.79E+308 到 -2.23E-308、0
2.23E-308 到 1.79E+308
real4 位元组 (Byte)-3.40E+38 到 -1.18E-38、0
1.18E-38 到 3.40E+38
numeric(有效位数, 小数)视精确度而定-10^38 +1 ~ 10^38 -1
decimal(有效位数, 小数)视精确度而定-10^38 +1 ~ 10^38 -1
numeric, decimal
(具有固定有效位数和小数位数的数值资料类型)
有效位数储存体
1 ~ 95 位元组 (Byte)
10 ~ 199 位元组 (Byte)
20 ~ 2813 位元组 (Byte)
29 ~ 3817 位元组 (Byte)


字元、字串 - Unicode 字串

资料型别位元组资料范围
char(n)1字元 1 位元组 (Byte)1 ~ 8000 字元
varchar(n)1字元 1 位元组 (Byte)1 ~ 8000 字元
varchar(max)变动长度 max = 2GB1 ~ 2^31 -1 字元
text变动长度 max = 2GB1 ~ 2^31 -1 字元

Unicode 字串

nchar(n)1字元 2 位元组 (Byte)1 ~ 4000 字元 固定长度
nvarchar(n)1字元 2Byte1 ~ 4000 字元 可变长度
nvarchar(max)1字元 2 位元组 (Byte)
变动长度 max = 2GB
1 ~ 2^ -1 字元 (可变长度大型文字资料)
ntext1字元 2 位元组 (Byte)
变动长度 max = 2GB
1 ~ 2^30 -1 字元


Binary 二进位字串

资料型别位元组资料范围
binary(n)固定长度 8000 Bytes1 ~ 8000 Bytes (储存体大小是 n 位元组)
varbinary(n)变动长度1 ~ 8000 Bytes
varbinary(max)变动长度 max = 2GB1 ~ 2^31 -1 Bytes
(储存体大小是输入资料的实际长度再加上 2 位元组)
image变动长度 max = 2GB0 到 2^31-1 (2,147,483,647)
位元组的可变长度二进位资料


日期 - 时间 - 货币 - Timestamp

资料型别位元组资料范围
datetime8 位元组(字元长度最小 19 个位置,最大 23 个位置)1753 年 1 月 1 日到 9999 年 12 月 31 日
时间范围 00:00:00 到 23:59:59.997
2012-06-30 06:30:02.612
datetime2(n) 6 个位元组代表有效位数小于 3,而 7 个位元组则代表有效位数是 3 和 4。所有其他有效位数则需要 8 个位元组西元 1 年 1 月 1 日到西元 9999 年 12 月 31 日
时间范围 00:00:00 到 23:59:59.9999999
2012-06-30 06:30:02.612
smalldatetime4 位元组 (Byte) 1900:01:01 到 2079:06:06
1900 年 1 月 1 日到 2079 年 6 月 6 日
2012-09-23 17:23
datetimeoffset(n)*10 Bytes (固定)预设值
最小 26 位数
(YYYY-MM-DD hh:mm:ss {+|-}hh:mm)
最大 34 位数
(YYYY-MM-DD hh:mm:ss. nnnnnnn {+|-}hh:mm)
0001-01-01 到 9999-12-31
西元 1 年 1 月 1 日 到西元 9999 年 12 月 31 日

SQL Server 资料库引擎使用两个 4 位元组的整数内部存储 datetime 资料类型的值。
第一个 4 位元组存储「基础日期」即 1900 年 1 月 1 日、之前或之后的天数。基础日期是系统参照日期。
另外一个 4 位元组存储天的时间,以午夜后经过的 1/300 秒数表示。

smalldatetime 资料类型存储天的日期和时间,但精确度低于 datetime。
资料库引擎将 smalldatetime 值存储为两个 2 位元组的整数。第一个 2 位元组存储 1900 年 1 月 1 日后的天数。
另外一个 2 位元组存储午夜后经过的分钟数。



Money 金融货币/精确数值

money8 位元组 (Byte)-2^63 ~ 2^63 -1 小数4位
-922,337,203,685,477.5808 到 922,337,203,685,477.5807
smallmoney4 位元组 (Byte)-2^31 ~ 2^31 -1 小数4位
-214,748.3648 到 214,748.3647

Timestamp 时间戳记

timestamp8 位元组 (Byte)8 Bytes 的 16 进位值
uniqueidentifier16 位元组 (Byte)16 Bytes 的 16 进位值

Timestamp 通常用来作为版本戳记资料表资料列的机制。储存体大小是 8 位元组。timestamp 资料类型只是会递增的数字,因此不会保留日期或时间。记录日期或时间建议使用 datetime 资料类型。TimestampRowversion 资料类型的同义字依照资料类型相同。


资料类型 (Transact-SQL)

docs.microsoft.com 资料类型



备註 MySQL 16777215 资料栏位溢位的错误讯息。

MySQL 出现 Duplicate entry 16777215 for key PRIMARY 错误讯息、为资料栏位溢位的错误讯息。资料表的主要键值 PRIMARY Key 设定的资料型态长度过小,当资料量大过于该长度时就会显示错误讯息。可以使用 MySQL 资料管理界面,将该资料表的 PRIMARY Key 栏位更改栏位属性如:int、或 bigint 来解决。