资料库 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 整数资料
资料型别 | 位元组 | 资料范围 |
---|---|---|
Tinyint | 1 位元组 (Byte) | 0 ~ 255 |
Smallint | 2 位元组 (Byte) | -2^15 (-32,768) 到 2^15-1 (32,767) |
Int | 4 位元组 (Byte) | -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) |
Bigint | 8 位元组 (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 资料类型。 |
Bit | 1 位元组 (Byte) | 0 , 1 , Null 字串值 True 和 False 可以转换成 bit 值 True 转换成 1 False 转换成 0。 |
Float 精确位数与浮点数
资料型别 | 位元组 | 资料范围 |
---|---|---|
float | 8 位元组 (Byte) | -1.79E+308 到 -2.23E-308、0 2.23E-308 到 1.79E+308 |
real | 4 位元组 (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 ~ 9 | 5 位元组 (Byte) | |
10 ~ 19 | 9 位元组 (Byte) | |
20 ~ 28 | 13 位元组 (Byte) | |
29 ~ 38 | 17 位元组 (Byte) |
字元、字串 - Unicode 字串
资料型别 | 位元组 | 资料范围 |
---|---|---|
char(n) | 1字元 1 位元组 (Byte) | 1 ~ 8000 字元 |
varchar(n) | 1字元 1 位元组 (Byte) | 1 ~ 8000 字元 |
varchar(max) | 变动长度 max = 2GB | 1 ~ 2^31 -1 字元 |
text | 变动长度 max = 2GB | 1 ~ 2^31 -1 字元 |
Unicode 字串
nchar(n) | 1字元 2 位元组 (Byte) | 1 ~ 4000 字元 固定长度 |
nvarchar(n) | 1字元 2Byte | 1 ~ 4000 字元 可变长度 |
nvarchar(max) | 1字元 2 位元组 (Byte) 变动长度 max = 2GB | 1 ~ 2^ -1 字元 (可变长度大型文字资料) |
ntext | 1字元 2 位元组 (Byte) 变动长度 max = 2GB | 1 ~ 2^30 -1 字元 |
Binary 二进位字串
资料型别 | 位元组 | 资料范围 |
---|---|---|
binary(n) | 固定长度 8000 Bytes | 1 ~ 8000 Bytes (储存体大小是 n 位元组) |
varbinary(n) | 变动长度 | 1 ~ 8000 Bytes |
varbinary(max) | 变动长度 max = 2GB | 1 ~ 2^31 -1 Bytes (储存体大小是输入资料的实际长度再加上 2 位元组) |
image | 变动长度 max = 2GB | 0 到 2^31-1 (2,147,483,647) 位元组的可变长度二进位资料 |
日期 - 时间 - 货币 - Timestamp
资料型别 | 位元组 | 资料范围 |
---|---|---|
datetime | 8 位元组(字元长度最小 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 |
smalldatetime | 4 位元组 (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 金融货币/精确数值
money | 8 位元组 (Byte) | -2^63 ~ 2^63 -1 小数4位 -922,337,203,685,477.5808 到 922,337,203,685,477.5807 |
smallmoney | 4 位元组 (Byte) | -2^31 ~ 2^31 -1 小数4位 -214,748.3648 到 214,748.3647 |
Timestamp 时间戳记
timestamp | 8 位元组 (Byte) | 8 Bytes 的 16 进位值 |
uniqueidentifier | 16 位元组 (Byte) | 16 Bytes 的 16 进位值 |
Timestamp 通常用来作为版本戳记资料表资料列的机制。储存体大小是 8 位元组。timestamp 资料类型只是会递增的数字,因此不会保留日期或时间。记录日期或时间建议使用 datetime 资料类型。Timestamp 是 Rowversion 资料类型的同义字依照资料类型相同。
资料类型 (Transact-SQL)
docs.microsoft.com 资料类型
备註 MySQL 16777215 资料栏位溢位的错误讯息。
MySQL 出现 Duplicate entry 16777215 for key PRIMARY 错误讯息、为资料栏位溢位的错误讯息。资料表的主要键值 PRIMARY Key 设定的资料型态长度过小,当资料量大过于该长度时就会显示错误讯息。可以使用 MySQL 资料管理界面,将该资料表的 PRIMARY Key 栏位更改栏位属性如:int、或 bigint 来解决。