您的位置:首页 > 数据库

数据库数据类型学习总结

2016-08-04 17:22 232 查看

SQLite 数据类型总结

http://www.cnblogs.com/bpasser/archive/2011/11/02/2233455.html

1。严格地说,SQLite 没有数据类型。SQLite 使用动态数据类型,即:数据的类型取决于数据本身,而不是它的容器(字段)

2。存储类型(Storage Class):数据保存到文件后的表现形式。包括:

NULL - 空值

INTERGER - 有符号整数类型

REAL - 浮点数类型

TEXT - 字符串(其编码取决于DB的编码)
BLOB - 二进制表示

3。亲和类型(Type Affinity):数据表的列中的数据对Storage Class的倾向性

 TEXT

NUMERIC

INTEGER

REAL
NONE

4。声明类型(Declared Type):CREATE TABLE/ALTER TABLE 语句中声明的列的类型

Declared Type、Type Affinity、Storage Class 之间的关系:

 Declared Type Type AffinityStorage Class(按优先级)

INT INTERGER
(同NUMERIC)

CHAR

TEXT TEXT
TEXT/NULL/BLOB

BLOB

(不指定) NONE
(As is)

REAL

FLOAT

DOUBLE REAL
(同NUMERIC)
(其它) NUMERIC
INTEGER/REAL/TEXT/NULL/BLOB

 例外:

(1)BLOB 数据始终保存为 BLOB 的 Storage Class

5。数据的比较。比较操作符(=,>,>=...)、IN、Sort by等,按照以下5个步骤比较左右操作数:

Step 1:根据下列规则确定左右操作数的 Type Affinity:

列名表达式 - 该列的 Affinity(见前面第4节表格第2列)

CAST ... AS ... - 所指定的 Affinity(见前面第4节表格第2列)
其他情况 - NONE Affinity

Step 2:Type Affinity 转换。如果左、右操作数都是下列 3 种 Type 

Affinity 之一,则按照下列优先顺序,将低优先级的转换为高优先级的:

数值类(INTEGER/REAL/NUMERIC)

TEXT
NONE

Step 3:由 Type Affinity 及数据的实际类型,确定其 Storage Class(见前面第4节表格第3列)

 

Step 4:如果左、右操作数属于不同的 Storage Class,则按照以下顺序(由小到大)确定比较结果:

NULL

数值类(INTEGER/REAL)

TEXT
BLOB

Step 5:如果左、右操作数属于相同的 Storage Class,则根据以下规则进行比较

NULL - 左值始终小于右值

数值类(INTEGER/REAL)- 按数值比较

TEXT - 逐字符比较

BLOB - 用 memcmp() 函数比较

========

Mysql支持的数据类型(总结)

http://mrxiong.blog.51cto.com/287318/1651098/

一.数值类型

Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型

(FLOAT,REAL,DOUBLE PRESISION),并在此基础上进行扩展。扩展后增加了TINYINT,MEDIUMINT,BIGINT这3种长度不同的整形,并增加了BIT类

型,用来存放位数据。

整数类型        字节       范围(有符号)      范围(无符号)        用途 

TINYINT        1字节        (-128,127)          (0,255)            小整数值 

SMALLINT       2字节     (-32 768,32 767)       (0,65 535)         大整数值 

MEDIUMINT      3字节    (-8 388 608,8 388 607) (0,16 777 215)      大整数值 

INT或INTEGER   4字节   (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值 

BIGINT         8字节   (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值 

FLOAT          4字节   (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,

3.402 823 466 E+38) 单精度浮点数值 

DOUBLE         8字节 (1.797 693 134 862 315 7 E+308,2.225 073 858 507 

201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 

7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E
+308) 双精度浮点数值 

DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于

M和D的值 小数值

INT 类型:

  在 MySQL 中支持的 5 个主要整数类型是 TINYINT,SMALLINT,MEDIUMINT

,INT 和 BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小

是不相同的。

MySQL 以一个可选的显示宽度指示器的形式对 SQL 标准进行扩展,这样当从数

据库检索一个值时,可以把这个值加长到指定的长度。例如,指定一个字段的类

型为 INT(6),

就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格

填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的

值的范围。

万一我们需要对一个字段存储一个超出许可范围的数字,MySQL 会根据允许范围

最接近它的一端截短后再进行存储。还有一个比较特别的地方是,

MySQL 会在不合规定的值插入表前自动修改为 0。

UNSIGNED 修饰符规定字段只保存正值。因为不需要保存数字的正、负符号,可

以在储时节约一个“位”的空间。从而增大这个字段可以存储的值的范围。

ZEROFILL 修饰符规定 0(不是空格)可以用来真补输出的值。使用这个修饰符

可以阻止 MySQL 数据库存储负值。

FLOAT、DOUBLE 和 DECIMAL 类型

  MySQL 支持的三个浮点类型是 FLOAT、DOUBLE 和 DECIMAL 类型。FLOAT 数

值类型用于表示单精度浮点数值,而 DOUBLE 数值类型用于表示双精度浮点数值



与整数一样,这些类型也带有附加参数:一个显示宽度指示器和一个小数点指示

器。比如语句 FLOAT(7,3) 规定显示的值不会超过 7 位数字,小数点后面带有 

3 位数字。

对于小数点后面的位数超过允许范围的值,MySQL 会自动将它四舍五入为最接近

它的值,再插入它。

DECIMAL 数据类型用于精度要求非常高的计算中,这种类型允许指定数值的精度

和计数方法作为选择参数。精度在这里指为这个值保存的有效数字的总个数,

而计数方法表示小数点后数字的位数。比如语句 DECIMAL(7,3) 规定了存储的值

不会超过 7 位数字,并且小数点后不超过 3 位。

忽略 DECIMAL 数据类型的精度和计数方法修饰符将会使 MySQL 数据库把所有标

识为这个数据类型的字段精度设置为 10,计算方法设置为 0。

UNSIGNED 和 ZEROFILL 修饰符也可以被 FLOAT、DOUBLE 和 DECIMAL 数据类型

使用。并且效果与 INT 数据类型相同。

二.字符串类型

 MySQL 提供了8个基本的字符串类型,分别:CHAR、VARCHAR、BINARY、

VARBINARY、BLOB、TEXT、ENUM 各SET等多种字符串类型。

可以存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据。

  字符串类型     字节大小         描述及存储需求

    CHAR         0-255字节          定长字符串 

    VARCHAR      0-255字节          变长字符串 

    TINYBLOB     0-255字节        不超过 255 个字符的二进制字符串 

    TINYTEXT     0-255字节        短文本字符串 

    BLOB         0-65535字节      二进制形式的长文本数据 

    TEXT         0-65535字节      长文本数据 

    MEDIUMBLOB   0-16 777 215字节 二进制形式的中等长度文本数据 

    MEDIUMTEXT   0-16 777 215字节 中等长度文本数据 

    LOGNGBLOB    0-4 294 967 295字节 二进制形式的极大文本数据 

    LONGTEXT     0-4 294 967 295字节 极大文本数据

    VARBINARY(M)                   允许长度0-M个字节的定长字节符串,值

的长度+1个字节

    BINARY(M)    M                 允许长度0-M个字节的定长字节符串

CHAR 和 VARCHAR 类型

  CHAR 类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。

这个大小修饰符的范围从 0-255。比指定长度大的值将被截短,而比指定长度小

的值将会用空格作填补。

CHAR 类型可以使用 BINARY 修饰符。当用于比较运算时,这个修饰符使 CHAR 

以二进制方式参于运算,而不是以传统的区分大小写的方式。

   CHAR 类型的一个变体是 VARCHAR 类型。它是一种可变长度的字符串类型,

并且也必须带有一个范围在 0-255 之间的指示器。CHAR 和 VARCHGAR 不同之处

在于 MYSQL 数据库处理

这个指示器的方式:CHAR 把这个大小视为值的大小,不长度不足的情况下就用

空格补足。而 VARCHAR 类型把它视为最大值并且只使用存储字符串实际需要的

长度

(增加一个额外字节来存储字符串本身的长度)来存储值。所以短于指示器长度的 

VARCHAR 类型不会被空格填补,但长于指示器的值仍然会被截短。

因为 VARCHAR 类型可以根据实际内容动态改变存储值的长度,所以在不能确定

字段需要多少字符时使用 VARCHAR 类型可以大大地节约磁盘空间、提高存储效

率。

VARCHAR 类型在使用 BINARY 修饰符时与 CHAR 类型完全相同。

TEXT 和 BLOB 类型

  对于字段长度要求超过 255 个的情况下,MySQL 提供了 TEXT 和 BLOB 两

种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存

储文本块或图像、

声音文件等二进制数据类型。

TEXT 和 BLOB 类型在分类和比较上存在区别。BLOB 类型区分大小写,而 TEXT 

不区分大小写。大小修饰符不用于各种 BLOB 和 TEXT 子类型。

比指定类型支持的最大范围大的值将被自动截短。

三.日期和时间类型

 在处理日期和时间类型的值时,MySQL 带有 5 个不同的数据类型可供选择。

它们可以被分成简单的日期、时间类型,和混合日期、时间类型。

根据要求的精度,子类型在每个分类型中都可以使用,并且 MySQL 带有内置功

能可以把多样化的输入格式变为一个标准格式。

 类型     大小(字节)     范围               格式          用途 

 DATE       4        1000-01-01/9999-12-31 YYYY-MM-DD    日期值 

 TIME       3        '-838:59:59'/'838:59:59' HH:MM:SS    时间值或持续

时间 

 YEAR       1         1901/2155               YYYY       年份值 

 DATETIME   8       1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD 

HH:MM:SS 混合日期和时间值 

 TIMESTAMP  4       1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混

合日期和时间值,时间戳

DATE、TIME 和 TEAR 类型

  MySQL 用 DATE 和 TEAR 类型存储简单的日期值,使用 TIME 类型存储时间

值。这些类型可以描述为字符串或不带分隔符的整数序列。如果描述为字符串,

DATE 类型的值应该使用连字号作为分隔符分开,而 TIME 类型的值应该使用冒

号作为分隔符分开。

  需要注意的是,没有冒号分隔符的 TIME 类型值,将会被 MySQL 理解为持

续的时间,而不是时间戳。

MySQL 还对日期的年份中的两个数字的值,或是 SQL 语句中为 TEAR 类型输入

的两个数字进行最大限度的通译。因为所有 TEAR 类型的值必须用 4 个数字存

储。

MySQL 试图将 2 个数字的年份转换为 4 个数字的值。把在 00-69 范围内的值

转换到 2000-2069 范围内。把 70-99 范围内的值转换到 1970-1979 之内。

如果 MySQL 自动转换后的值并不符合我们的需要,请输入 4 个数字表示的年份



DATEYIME 和 TIMESTAMP 类型

  除了日期和时间数据类型,MySQL 还支持 DATEYIME 和 TIMESTAMP 这两种

混合类型。它们可以把日期和时间作为单个的值进行存储。

这两种类型通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大

量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好

作用。

如果我们对 TIMESTAMP 类型的字段没有明确赋值,或是被赋与了 null 值。

MySQL 会自动使用系统当前的日期和时间来填充它。

复合类型

  MySQL 还支持两种复合数据类型 ENUM 和 SET,它们扩展了 SQL 规范。虽

然这些类型在技术上是字符串类型,但是可以被视为不同的数据类型。

一个 ENUM 类型只允许从一个集合中取得一个值;而 SET 类型允许从一个集合

中取得任意多个值。

ENUM 类型

  ENUM 类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相

互排拆的数据时容易让人理解,比如人类的性别。ENUM 类型字段可以从集合中

取得一个值或使用 null 值,

除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。另外如果插入

值的大小写与集合中值的大小写不匹配,MySQL 会自动使用插入值的大小写转换

成与集合中大小写一致的值。

   ENUM 类型在系统内部可以存储为数字,并且从 1 开始用数字做索引。一个 

ENUM 类型最多可以包含 65536 个元素,其中一个元素被 MySQL 保留,用来存

储错误信息,

这个错误值用索引 0 或者一个空字符串表示。

MySQL 认为 ENUM 类型集合中出现的值是合法输入,除此之外其它任何输入都将

失败。这说明通过搜索包含空字符串或对应数字索引为 0 的行就可以很容易地

找到错误记录的位置。

SET 类型

 SET 类型与 ENUM 类型相似但不相同。SET 类型可以从预定义的集合中取得任

意数量的值。并且与 ENUM 类型相同的是任何试图在 SET 类型字段中插入非预

定义的值都会使 

MySQL 插入一个空字符串。如果插入一个即有合法的元素又有非法的元素的记录

,MySQL 将会保留合法的元素,除去非法的元素。

 一个 SET 类型最多可以包含 64 项元素。在 SET 元素中值被存储为一个分离

的“位”序列,这些“位”表示与它相对应的元素。“位”是创建有序元素集合

的一种简单而有效的方式。

并且它还去除了重复的元素,所以 SET 类型中不可能包含两个相同的元素。

希望从 SET 类型字段中找出非法的记录只需查找包含空字符串或二进制值为 0 

的行。

通过对每种数据类型的用途,物理存储,表示范围等有一个概要的了解。这样在

面对具体应用时,就可以根据相应的特来来选择合适的数据类型,使得我们能够

争取在满足应用的基础上,

用较小的存储代价换来较高的数据库性能。

========

Sql Server基础:数据类型详解

http://blog.jobbole.com/86724/

数据类型是一种属性,用于指定对象可保存的数据的类型,SQL Server中支持多

种数据类型,包括字符类型、数值类型以及日期类型等。数据类型相当于一个容

器,容器的大小决定了装的东西的多少,将数据分为不同的类型可以节省磁盘空

间和资源。

Sql Server 还能自动限制每个数据类型的取值范围,例如定义了一个类型为int

的字段,如果插入数据时插入的值的大小在smallint或者tinyint范围之内, 

Sql Server 会自动将类型转换为smallint 或者tinyint,这样一来,在存储数

据时,占用的存储空间只有int的1/2或则1/4.

Sql Server数据库管理系统中的数据类型可以分为两类,分别是:系统默认的数

据类型和用户自定义的数据类型。下面分别介绍这两大类数据类型的内容.

一:系统数据类型

Sql Server 提供的系统数据类型有一下几大类,共25种。 Sql Server会自动限

制每个系统数据类型的取值范围,当插入数据库中的值 超过了数据允许的范围

时, Sql Server 就会报错。

1.整数数据类型

整数数据类型是常用的数据类型之一,主要用于存储数值,可以直接进行数据运

算而不必使用函数转换.

(1).bigint

每个bigint存储在8个字节中,其中一个二进制位表示符号位,其它63个二进制

位表示长度和大小,可以表示-2的63次方~2的63次方-1范围内的所有整数。

(2).int

int或者integer,每个int存储在4个字节中,其中一个二进制位表示符号位,其它

31个二进制位表示长度和大小,,可以表示-2的31次方~2的31次方-1范围内的所

有整数。

(3).smallint

每个smallint类型的数据占用了两个字节的存储空间,其中一个二进制位表示整

数值的正负号,其它15个二进制位表示长度和大小,,可以表示-2的15次方~2的

15次方-1范围内的所有整数。

(4).tinyint

每个tinyint类型的数据占用了一个字节的存储空间,可以表示0~255范围内的所

有整数.

2.浮点数据类型

浮点数据类型存储十进制小数,用于表示浮点数值数据的大致数值数据类型。浮

点数据为近似值;浮点数值的数据则Sql Server中采用了只入不舍的方式进行存

储,即当且仅当要舍入的数是一个非零数时,对其保留数字部分的最低有效位上

加1,并进行必要的近位。

(1).real

可以存储正的或者负的十进制数值,它的存储范围从-3.40E+38~-1.18E-38、0以

及1.18E-38~3.40E+38.每个real类型的数据占用4个字节的存储空间。

(2)float[(n)]

其中为用于存储float数值尾数的位数(以科学计数法表示),因此可以确定精

度和存储大小。如果指定了n它必须是介于1和53之间的某个值。n的默认值为53.

其范围从-1.79E+308~-2.23E-308、0以及2.23E+308~1.79E-308。如果不指定数

据类型float的长度,它占用8个字节的存储空间。float数据类型可以写成

float(n)的形式,n为指定float数据的精度,n为1~53之间的整数值。当n取1~24

时,实际上定义了一个real类型的数据,系统用4个自己存储它。当n取25~53时

,系统认为其是float类型,用8个字节存储它。

(3).decimal[(p[,s])]和numeric[(p[,s])

带固定精度和小数位数的数值数据类型。使用最大精度时,有效值从-

10^38+1~10^38-1。numeric在功能上等价于decimal。

p(精度)指定了最多可以存储十进制数字的总位数,包括小数点左边和右边的位

数,该精度必须是从1到最大精度38之间的值,默认精度为18.

s(小数位数)指定小数点右边可以存储的十进制数字的最大位数,小数位数必须

是从0到p之间的值,仅在指定精度后才可以指定小数的位数。默认小数位数是0

;因此,0<=s<=p。最大存储大小基于精度而变化。例如:decimal(10,5)表示共

有10位数,其中整数5位,小数5位。

3.字符数据类型

字符数据类也是Sql Server中最常用的数据类型之一,用来存储各种字符,数字

符号和特殊符号。在使用字符数据类型时,需要在其前后加上英文单引号或者双

引号。

(1)char(n)

当用char数据类型存储数据时,每个字符和符号占用一个字节存储空间,n表示

所有字符所占的存储空间,n的取值为1~8000。如不指定n的值,系统默认n的值

为1。若输入数据的字符串长度小于n,则系统自动在其后添加空格来填满设定好

的空间;若输入的数据过长,则会截掉其超出部分。

(2). varhcar(n|max)

n为存储字符的最大长度,其取值范围是1~8000,但可根据实际存储的字符数改

变存储空间,max表示最大存储大小是2的31次方-1个字节。存储大小是输入数据

的实际长度加2个字节。所输入数据的长度可以为0个字符。如varchcar(20),则

对应的变量最多只能存储20个字符,不够20个字符的按实际存储。

(3).nchar(n)

n个字符的固定长度Unicode字符数据。n值必须在1~4000之间(含),如果没有数

据定义的或变量声明语句中指定n,默认长度为1。此数据类型采用Unicode字符

集,因此每一个存储单位占两个字节,可将全世界文字囊括在内(当然除了部分

生僻字)。

(4)nvarchar(n|max)

与varchar类似,存储可变长度Unicode字符数据。n值必须在1~4000之间(含),

如果没有数据定义的或变量声明语句中指定n,默认长度为1。max指最大存储大

小为2的31次方-1字节。存储大小是输入字符个数的两倍+2个字节。所输入的数

据长度可以为0个字符.

4.日期和时间数据类型

(1).date

存储用字符串表示的日期数据,可以表示0001-01-01~9999-12-31(公元元年1月1

日到公元9999年12月31日)间的任意日期值。数据格式为“YYYY-MM-DD”:

YYYY:表示年份的四位数字,范围为0001~9999;

MM:表示指定年份中月份的两位数字,范围为01~12;DD:表示指定月份中某一

天的两位数字,范围为01~31(最高值取决于具体月份)

该数据类型占用3个字节的空间。

(2).time

以字符串形式记录一天的某个时间,取值范围为00:00:

00.0000000~23:59:59.9999999,数据格式为“hh:mm:ss[.nnnnnnn]”:

hh:表示小时的两位数字,范围为0~23。

mm:表示分钟的两位数字,范围为0~59。

ss:表示秒的两位数字,范围为0~59。

n*是0~7为数字,范围为0~9999999,它表示秒的小部分.

time值在存储时占用5个字节的空间。

(3).datetime

用于存储时间和日期数据,从1753年1月1日到9999年12月31日,默认值为1900-

01-01 00:00:00,当插入数据或在其它地方使用时,需用单引号或双引号括起

来。可以使用“/”、“-”和“.”作为分隔符。该类型数据占用8个字节的空间



(4).datetime2

datetime的扩展类型,其数据范围更大,默认的最小精度最高,并具有可选的用

户定义的精度。默认格式为:YYYY-MM-DD hh:mm:ss[.fractional seconds],日

期的存取范围是0001-01-01~9999-12-31(公元元年1月1日到公元9999年12月31日

).

(5).smalldatetime

smalldatetime类型与datetime类型相似,只是其存储范围是从1900年1月1日到

2079年6月6日,当日期时间精度较小时,刻印使用smalldatetime,该类型数据占

用4个字节的存储空间。

(6).datetimeoffset

用于定义一个采用24小时制与日期相组合并可识别时区的时间。默认格式是:“

YYYY-MM-DD hh:mm:ss[.nnnnnnn][{+|-}hh:mm]”:

hh:两位数,范围是-14~14

mm:两位数,范围为00~59;

这里hh是时区偏移量,该类型数据中保存的是世界标准时间(UTC)值,eg:要

存储北京时间2011年11月11日12点整,存储时该值将是2011-11-11 

12:00:00+08:00,因为北京处于东八区,比UTC早8个小时。存储该数据类型数据

时默认占用10个字节大小的固定存储空间.

5.文本和图形数据类型

(1).text

用于存储文本数据,服务器代码页中长度可变的非Unicode数据,最大长度为2的

31次方-1(2147 483 647)个字符。当服务器代码页使用双字节字符时,存储仍

是2147 483 647字节。

(2)ntext

与text类型作用相同,为长度可变的非Unicode数据,最大长度为2的30次方-1

(1073 741 283)个字符。存储大小是所输入字符个数的两倍(以字节为单位).

(3).image

长度可变的二进制数据,范围为:0~2的31次方-1个字节。用于存储照片、目录图

片或者图画,容量也是2147 483 647个字节,由系统根据数据的长度自动分配空

间,存储该字段的数据一般不能使用insert语句直接输入。

6.货币数据类型

(1).money

用于存储货币值,取值范围为正负922 337 213 685 477.580 8之间。money数据

类型中整数部分包含19个数字,小数部分包含4个数字,因此money数据类型的精

度是19,存储时占用8个字节的存储空间。

(2).smallmoney

与money类型相似,取值范围为214 748.346 8之间,smallmoney存储时占用4个

字节存储空间。输入数据时在前面加上一个货币符号,如人民币为¥或其它定义

的货币符号。

7.位数据类型

bit称为位数据类型,只取0或1为值,长度1字节。bit值经常当作逻辑值用于判

断true(1)或false(0),输入非0值时系统将其替换为1。

8.二进制数据类型

(1)binary(n)

长度为n个字节的固定长度二进制数据,其中n是从1~8000的值。存储大小为n个

字节。在输入binary值时,必须在前面带0x,可以使用0xAA5代表AA5,如果输入

数据长度大于定于的长度,超出的部分会被截断。

(2).varbinary(n|max)

可变长度二进制数据。其中n是从1~8000的值,max指示存储大小为2的31次方-1

字节。存储大小为所输入数据的实际长度+2个字节。

在定义的范围内,不论输入的时间长度是多少,binary类型的数据都占用相同的

存储空间,即定义时空间,而对于varbinary类型的数据,在存储时实际值的长

度使用存储空间.

9.其他数据类型

(1).rowversion

每个数据都有一个计数器,当对数据库中包含rowversion列的表执行插入或者更

新操作时,该计数器数值就会增加。此计数器是数据库行版本。一个表只能有一

个rowversion列。每次修改或者插入包含rowversion列的行时,就会在

rowversion列中插入经过增量的数据库行版本值。

公开数据库中自动生成的唯一二进制数字的数据类型。rowversion通常用作给表

行加版本戳的机制。存储大小为8个字节。rowversion数据类型只是递增的数字

,不保留日期或时间。

(2)timestamp

时间戳数据类型,timestamp的数据类型为rowversion数据类型的同义词,提供

数据库范围内的唯一值,反映数据修改的唯一顺序,是一个单调上升的计数器,

此列的值被自动更新。

在create table或alter table 语句中不必为提么timestamp数据类型指定列名



eg:create table testTable (id int primary key,timestamp );

此时Sql Server数据库引擎将生成timestamp列名;但rowversion不具备这样的

行为,在使用rowversion时,必须指定列名.

(3).uniqueidentifier

16字节的GUID(Globally Unique Identifier,全球唯一标识符),是Sql Server

根据网络适配器地址和主机CPU时钟产生的唯一号码,其中,每个为都是0~9或

a~f范围内的十六进制数字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF,此

号码可以通过newid()函数获得,在全世界各地的计算机由次函数产生的数字不

会相同。

(4).cursor

游标数据类型,该类型类似与数据表,其保存的数据中的包含行和列值,但是没

有索引,游标用来建立一个数据的数据集,每次处理一行数据。

(5).sql_variant

用于存储除文本,图形数据和timestamp数据外的其它任何合法的Sql Server数

据,可以方便Sql Server的开发工作。

(6).table

用于存储对表或视图处理后的结果集。这种新的数据类型使得变量可以存储一个

表,从而使函数或过程返回查询结果更加方便、快捷。

(7).xml

存储xml数据的数据类型。可以在列中或者xml类型的变量中存储xml实例。存储

的xml数据类型表示实例大小不能超过2GB。

二:自定义数据类型

Sql Server允许用户自定义数据类型,用户自定义数据类型是建立在Sql Server

系统数据类型的基础上的,自定义的数据类型使得数据库开发人员能够根据需要

定义符合自己开发需求的数据类型。自定义数据类型虽然使用比较方便,但是需

要大量的性能开销,所以使用时要谨慎。当用户定义一种数据类型时,需要指定

该类型的名称、所基于的系统数据类型以及是否允许为空等。Sql Server为用户

提供了两种方法来创建自定义数据类型。下面分别介绍这两种个定义数据类型的

方法。

(1).使用对象资源管理器创建用户自定义数据类型

创建数据库Test–>【可编程性】–>【类型】节点,右击【用户定义数据类型】

节点,在弹出的框中,按照说明相应操作即可。很简单,就不截图赘述了。

(2).使用存储过程创建用户自定义数据类型

触雷使用图形界面创建自定义数据类型,Sql Server中的系统存储过程

sp_addtype也可为用户提供使用T_sql语句创建自定义数据类型的方法。其语法

如下:

MySQL

 sp_addtype [@typename= ] type, 

 [@phystyle=] system_data_type 

 [,[@nulltype =] 'null_type']

1

2

3

 sp_addtype [@typename= ] type, 

 [@phystyle=] system_data_type 

 [,[@nulltype =] 'null_type']

其中,各参数的含义如下:

type:用于指定用户定义的数据类型的名称。

system_data_type:用于指定相应的系统提供的数据类型的名称及定义。注意:

未能使用timestamp数据类型,当所使用的系统数据类型有额外的说明时,需要

用引号将其括起来。

null_type:用于指定用户自定义的的数据类型的null属性,其值可为“null” 

、“not null“或”notnull“。默认时与系统默认的null属性相同。用户自定

义的数据类型的名称在数据库中应该是唯一的。

eg:sp_addtype homeAddress ‘varchar(120)’,’not null’

删除用户自定义数据类型:

a.用图形界面删除,不做赘述。

b.用系统存储过程sp_droptype删除. eg:sp_droptype homeAddress,其中

homeAddress为用户自定义数据类型名称.

注意:数据库正在使用的用户自定义数据类型,不能被删除。

========

ORACLE常见数据类型详解

http://blog.csdn.net/zhiweianran/article/details/7793554

1、字符类型

• CHAR:一个定长字符串,当位数不足自动用空格填充来达到其最大长度。如非

NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的

信息。

• VARCHAR2:目前这也是VARCHAR 的同义词。这是一个变长字符串,与CHAR 类

型不同,它不会用空格填充至最大长度。VARCHAR2(12)可能包含0~

12字节的信息。VARCHAR2最多可以存储4,000 字节的信息。

CHAR和VARCHAR2的比较

CHAR(4) “A“ 实际在数据库中存储为"A “

“ABCDE”超长报错

VARCHAR2(4) “A” 存储的还是“A”

“ABCDE”超长报错

汉字:每个汉字占多少字节,要看具体的编码方式,如UTF-8(1-3字节)、

GB2312(2字节)、GBK(2字节)、GB18030(1、2、4字节)

2、数字类型

• NUMBER:该数据类型能存储精度最多达38位的数字。每个数存储在一个变长字

段中,其长度在0~22字节之间。Oracle的NUMBER类型精度很高, 远远高于许多

编程语言中常规的FLOAT和DOUBLE类型。

NUMBER( p,s ) p表示精度(总长度) s表示小数位置且四舍五入

NUMBER(10,3) 10是总长度,3是小数位数的长度

123.456

123.4567 :将存储为123.457

12345679.899 :精度超长了,10是总长度,3是小数位, 整数位为10-3=7位

NUMBER(10)==NUMBER(10,0) java.lang.Integer

NUMBER(19)==NUMBER(19,0) java.lang.Long

3、日期类型

• DATE:一个7字节的定宽日期/时间数据类型。其中总包含7个属性,包括:世

纪、世纪中哪一年、月份、月中的哪一天、小时、分钟和秒。

• TIMESTAMP:一个7 字节或12.字节的定宽日期/时间数据类型。它与DATE 数据

类型不同,因为TIMESTAMP 可以包含小数秒(fractional second);带小数秒

的TIMESTAMP 在小数点右边最多可以保留9位。

4、二进制及大文本数据

• BLOB: (binary large object)在Oracle9i及以前的版本中, 这种数据类型

允许存储最多4GB的数据, 在Oracle 10g及以后的版本中允许存储最多(4GB)

×(数据库块大小)字节的数据。BLOB包含不需要进行字符集转换的“二进制“

数据,如果要存储电子表格、字处理文档、图像文件等就很适合采用

• CLOB:(Character Large Object)在Oracle9i及以前的版本中, 这种数据

类型允许存储最多4GB的数据, 在Oracle 10g及以后的版本中允许存储最多

(4GB)×(数据库块大小)字节的数据。CLOB包含要进行字符集转换的信息。

这种数据类型很适合存储纯文本信息。

========

常用数据库基本数据类型

http://blog.csdn.net/duqiuke/article/details/8772655

  

Microsoft Access 数据类型

数据类型     描述                                                 存储

Text           用于文本或文本与数字的组合       最多 255 个字符。 

Memo 

Memo 用于更大数量的文本。最多存储 65,536 个字符。

注释:无法对 memo 字段进行排序。不过它们是可搜索的。

Byte 允许 0 到 255 的数字。 1 字节

Integer 允许介于 -32,768 到 32,767 之间的数字。 2 字节

Long 允许介于 -2,147,483,648 与 2,147,483,647 之间的全部数字 4 字节

Single 单精度浮点。处理大多数小数。 4 字节

Double 双精度浮点。处理大多数小数。 8 字节

Currency 

用于货币。支持 15 位的元,外加 4 位小数。

提示:您可以选择使用哪个国家的货币。

8 字节

AutoNumber AutoNumber 字段自动为每条记录分配数字,通常从 1 开始。 4 字节

Date/Time 用于日期和时间 8 字节

Yes/No 

逻辑字段,可以显示为 Yes/No、True/False 或 On/Off。

在代码中,使用常量 True 和 False (等价于 1 和 0)

注释:Yes/No 字段中不允许 Null 值

1 比特

Ole Object 可以存储图片、音频、视频或其他 BLOBs (Binary Large OBjects) 最多 1GB

Hyperlink 包含指向其他文件的链接,包括网页。 

Lookup Wizard 允许你创建一个可从下列列表中进行选择的选项列表。 4 字节 

 

MySQL 数据类型

在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。

Text 类型:

数据类型 描述

CHAR(size) 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。

VARCHAR(size) 

保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。

注释:如果值的长度大于 255,则被转换为 TEXT 类型。

TINYTEXT 存放最大长度为 255 个字符的字符串。

TEXT 存放最大长度为 65,535 个字符的字符串。

BLOB 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。

MEDIUMTEXT 存放最大长度为 16,777,215 个字符的字符串。

MEDIUMBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。

LONGTEXT 存放最大长度为 4,294,967,295 个字符的字符串。

LONGBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。

ENUM(x,y,z,etc.) 

允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。

注释:这些值是按照你输入的顺序存储的。

可以按照此格式输入可能的值:ENUM('X','Y','Z')

SET 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。

Number 类型:

数据类型 描述

TINYINT(size) -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。

SMALLINT(size) -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。

MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。

INT(size) -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。

BIGINT(size) -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。

FLOAT(size,d) 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

DOUBLE(size,d) 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

DECIMAL(size,d) 作为字符串存储的 DOUBLE 类型,允许固定的小数点。

* 这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。

Date 类型:

数据类型 描述

DATE() 

日期。格式:YYYY-MM-DD

注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'

DATETIME() 

*日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS

注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'

TIMESTAMP() 

*时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS

注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC

TIME() 时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'

YEAR() 

2 位或 4 位格式的年。

注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。

* 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 Insert 或 Update 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。 

SQL Server 数据类型

Character 字符串:

数据类型 描述 存储

char(n) 固定长度的字符串。最多 8,000 个字符。 n

varchar(n) 可变长度的字符串。最多 8,000 个字符。 

varchar(max) 可变长度的字符串。最多 1,073,741,824 个字符。 

text 可变长度的字符串。最多 2GB 字符数据。 

Unicode 字符串:

数据类型 描述 存储

nchar(n) 固定长度的 Unicode 数据。最多 4,000 个字符。 

nvarchar(n) 可变长度的 Unicode 数据。最多 4,000 个字符。 

nvarchar(max) 可变长度的 Unicode 数据。最多 536,870,912 个字符。 

ntext 可变长度的 Unicode 数据。最多 2GB 字符数据。 

Binary 类型:

数据类型 描述 存储

bit 允许 0、1 或 NULL 

binary(n) 固定长度的二进制数据。最多 8,000 字节。 

varbinary(n) 可变长度的二进制数据。最多 8,000 字节。 

varbinary(max) 可变长度的二进制数据。最多 2GB 字节。 

image 可变长度的二进制数据。最多 2GB。 

Number 类型:

数据类型 描述 存储

tinyint 允许从 0 到 255 的所有数字。 1 字节

smallint 允许从 -32,768 到 32,767 的所有数字。 2 字节

int 允许从 -2,147,483,648 到 2,147,483,647 的所有数字。 4 字节

bigint 允许介于 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之间的所有数字。 8 字节

decimal(p,s) 

固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。

p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。

s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。

5-17 字节

numeric(p,s) 

固定精度和比例的数字。允许从 -10^38 +1 到 10^38 -1 之间的数字。

p 参数指示可以存储的最大位数(小数点左侧和右侧)。p 必须是 1 到 38 之间的值。默认是 18。

s 参数指示小数点右侧存储的最大位数。s 必须是 0 到 p 之间的值。默认是 0。

5-17 字节

smallmoney 介于 -214,748.3648 和 214,748.3647 之间的货币数据。 4 字节

money 介于 -922,337,203,685,477.5808 和 922,337,203,685,477.5807 之间的货币数据。 8 字节

float(n) 从 -1.79E + 308 到 1.79E + 308 的浮动精度数字数据。参数 n 指示该字段保存 4 字节还是 8 字节。float(24) 保存 4 字节,而 float(53) 保存 8 字节。n 的默认值是 53。 4 或 8 字节

real 从 -3.40E + 38 到 3.40E + 38 的浮动精度数字数据。 4 字节

Date 类型:

数据类型 描述 存储

datetime 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 3.33 毫秒。 8 bytes

datetime2 从 1753 年 1 月 1 日 到 9999 年 12 月 31 日,精度为 100 纳秒。 6-8 bytes

smalldatetime 从 1900 年 1 月 1 日 到 2079 年 6 月 6 日,精度为 1 分钟。 4 bytes

date 仅存储日期。从 0001 年 1 月 1 日 到 9999 年 12 月 31 日。 3 bytes

time 仅存储时间。精度为 100 纳秒。 3-5 bytes

datetimeoffset 与 datetime2 相同,外加时区偏移。 8-10 bytes

timestamp 存储唯一的数字,每当创建或修改某行时,该数字会更新。timestamp 基于内部时钟,不对应真实时间。每个表只能有一个 timestamp 变量。 

其他数据类型:

数据类型 描述

sql_variant 存储最多 8,000 字节不同数据类型的数据,除了 text、ntext 以及 timestamp。

uniqueidentifier 存储全局标识符 (GUID)。

xml 存储 XML 格式化数据。最多 2GB。

cursor 存储对用于数据库操作的指针的引用。

table 存储结果集,供稍后处理。 

 

MSSQL2008数据类型

数据类型

类型

描             述

bit

整型

bit 数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或No、True 或Fa lse 、On 或Off

int

整型

int 数据类型可以存储从- 231(-2147483648)到231 (              2147483 647       )之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4个字节

smallint

整型

smallint 数据类型可以存储从- 215(-32768)到215(32767)之间的整数。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。这种数据类型在数据库里占用2 字节空间

tinyint

整型

tinyint 数据类型能存储从0到255 之间的整数。它在你只打算存储有限数目的数值时很有用。 这种数据类型在数据库中占用1 个字节

numeric

精确数值型

numeric数据类型与decimal 型相同

decimal

精确数值型

decimal 数据类型能用来存储从-1038-1到1038-1的固定精度和范围的数值型数据。使用这种数据类型时,必须指定范围和精度。 范围是小数点左右所能存储的数字的总位数。精度是小数点右边存储的数字的位数

money

货币型

money 数据类型用来表示钱和货币值。这种数据类型能存储从-9220亿到9220 亿之间的数据,精确到货币单位的万分之一

smallmoney

货币型

smallmoney 数据类型用来表示钱和货币值。这种数据类型能存储从-214748.3648 到214748.3647 之间的数据,精确到货币单位的万分之一

float

近似数值型

float 数据类型是一种近似数值类型,供浮点数使用。说浮点数是近似的,是因为在其范围内不是所有的数都能精确表示。浮点数可以是从-1.79E+308到1.79E+308 之间的任意数

real

近似数值型

real 数据类型像浮点数一样,是近似数值类型。它可以表示数值在-3.40E+38到3.40E+38之间的浮点数

datetime

日期时间型

datetime数据类型用来表示日期和时间。这种数据类型存储从1753年1月1日到9999年12月3 1日间所有的日期和时间数据, 精确到三百分之一秒或3.33毫秒

Smalldatetime

日期时间型

smalldatetime 数据类型用来表示从1900年1月1日到2079年6月6日间的日期和时间,精确到一分钟

cursor

特殊数据型

cursor 数据类型是一种特殊的数据类型,它包含一个对游标的引用。这种数据类型用在存储过程中,而且创建表时不能用

timestamp

特殊数据型

timestamp 数据类型是一种特殊的数据类型,用来创建一个数据库范围内的唯一数码。 一个表中只能有一个timestamp列。每次插入或修改一行时,timestamp列的值都会改变。尽管它的名字中有“time”, 但timestamp列不是人们可识别的日期。在一个数据库里,timestamp值是唯一的

Uniqueidentifier

特殊数据型

Uniqueidentifier数据类型用来存储一个全局唯一标识符,即GUID。GUID确实是全局唯一的。这个数几乎没有机会在另一个系统中被重建。可以使用NEWID 函数或转换一个字符串为唯一标识符来初始化具有唯一标识符的列

char

字符型

char数据类型用来存储指定长度的定长非统一编码型的数据。当定义一列为此类型时,你必须指定列长。当你总能知道要存储的数据的长度时,此数据 类型很有用。例如,当你按邮政编码加4个字符格式来存储数据时,你知道总要用到10个字符。此数据类型的列宽最大为8000 个字符

varchar

字符型

varchar数据类型,同char类型一样,用来存储非统一编码型字符数据。与char 型不一样,此数据类型为变长。当定义一列为该数据类型时,你要指定该列的最大长度。 它与char数据类型最大的区别是,存储的长度不是列长,而是数据的长度

text

字符型

text 数据类型用来存储大量的非统一编码型字符数据。这种数据类型最多可以有231-1或20亿个字符

nchar

统一编码字符型

nchar 数据类型用来存储定长统一编码字符型数据。统一编码用双字节结构来存储每个字符,而不是用单字节(普通文本中的情况)。它允许大量的扩展字符。此数据类型能存储4000种字符,使用的字节空间上增加了一倍

nvarchar

统一编码字符型

nvarchar 数据类型用作变长的统一编码字符型数据。此数据类型能存储4000种字符,使用的字节空间增加了一倍

ntext

统一编码字符型

ntext 数据类型用来存储大量的统一编码字符型数据。这种数据类型能存储230 -1或将近10亿个字符,且使用的字节空间增加了一倍

binary

二进制数据类型

binary数据类型用来存储可达8000 字节长的定长的二进制数据。当输入表的内容接近相同的长度时,你应该使用这种数据类型

varbinary

二进制数据类型

varbinary 数据类型用来存储可达8000 字节长的变长的二进制数据。当输入表的内容大小可变时,你应该使用这种数据类型

image

二进制数据类型

image 数据类型用来存储变长的二进制数据,最大可达231-1或大约20亿字节

 

oracle基本数据类型:

数据类型 含义 

char 定长的字符型数据,最大长度可达2KB 

nchar 存储Unicode字符集的定长字符型数据,最大长度为2KB 

Varchar2 可变长的字符型数据,最大长度可达4000个字符 

Nvarchar2 存储Unicode字符集的变长字符型数据,最大长度为4KB 

number 存储整型或浮点型数据 

Date 存储日期数据 

Long 存储最大长度为2GB的变长字符数据 

Raw 存储非结构化数据的变长字符数据,最长为2KB 

Long Raw 存储非结构化数据的变长字符数据,最长为2GB 

Rowid 存储表中列的物理地址的二进制数据,占用固定的10个字节 

Blog 二进制大对象,最大长度为4GB 

Clob 字符大对象,最大长度为4GB 

Nclob 存储多达4GB的Unicode字符数据 

Bfile 把非结构化的二进制数据存储在数据库以外的操作系统文件中 

Urowid 存储表示任何类型列地址的二进制数据 

float 存储浮点数

========
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 数据类型