列类型概述

数据库中的每个表都是由一个或多个列构成的。可以用 CREATE TABLE 语句创建一个表,创建表时要为每列指定一个类型。列的类型与数据类型相对应,但是比数据类型更为具体,用列类型描述表列可能包含的值的种类以及范围,列的值必须符合规定,不能包含对应的数据类型所允许的所有值。例如,CHAR(16)就规定了存储的字符串值必须是16位。当然不是你必须存储16个字符,而是指列在表中要占16个字符的宽度的。

MySQL的列类型是一种手段,通过这种手段可以描述一个表列包含什么类型的值,这又决定了 MySQL 怎样处理这些值。例如,数值值既可用数值也可用串的列类型来存放,但是根据存放这些值的类型,MySQL 对它们的处理将会有些不同。每种列类型都有几个特性如下:

  • 其中可以存放什么类型的值。
  • 值要占据多少空间,以及该值是否是定长的(所有值占相同数量的空间)或可变长的(所占空间量依赖于所存储的值)。
  • 该类型的值怎样比较和存储。
  • 此类型是否允许 NULL 值。
  • 此类型是否可以索引。

下面是创建一个表的例子:

CREATE TABLE teacher

(

id TINYINT UNSIGNED NOT NULL,

name CHAR(16) NOT NULL,

tele NUMERIC(8),

sex ENUM("F","M") DEFAULT "M"

)

由上面这个例子可以知道,创建列类型的语法是:

col_name col_type [col_attributes][general_attributes]

  • col_name 列的名字
  • col_type 列类型,控制存储在列中的数据类型
  • col_attributes 专用属性,只能应用于制定列,例如,我们还不知道的BINARY。如果你使用专用属性,必须在列的类型之后,列的通用属性之前。
  • general_attributes通用属性,可以应用在出少数列的任意列,例如上面提到了NULL、NOT NULL、和DEFAULT。

我们将简要地考察一下 MySQL列类型以获得一个总的概念,然后更详细地讨论描述每种列类型的属性。

MySQL的数字类型如表1-3所示,可以包括浮点类型和整数类型:

表1-3 MySQL的数字列类型

类型名

涵义

TINYINT

一个很小的整数

SMALLINT

一个小整数

MEDIUMINT

一个中等大小整数

INT、INTEGER

一个正常大小整数

BIGINT

一个大整数

FLOAT

一个小(单精密)浮点数字

DOUBLE

DOUBLE PRECISION

REAL

一个正常大小(双精密)浮点数字

DECIMAL

NUMERIC

一个未压缩(unpack)的浮点数字,“未压缩”意味着数字作为一个字符串被存储

MySQL的字符串类型如表1-4所示,串类型中不仅可以存储字符串,实际上任何二进制数据,例如,图象、音频、视频等,都可以存储在串类型中。

表1-4 MySQL的字符串列类型

类型名

涵义

CHAR

一个定长字符串

VARCHAR

一个变长字符串

TINYBLOB

TINYTEXT

最大长度为255(2^8-1)个字符的BLOB或TEXT列

BLOB

TEXT

最大长度为65535(2^16-1)个字符的BLOB或TEXT列

MEDIUMBLOB  

MEDIUMTEXT  

最大长度为16777215(2^24-1)个字符的BLOB或TEXT列

LONGBLOB

LONGTEXT

最大长度为4294967295(2^32-1)个字符的BLOB或TEXT列

ENUM('value1','value2',...)  

枚举:列只能赋值为某个枚举成员或NULL

SET('value1','value2',...)  

集合:列可以赋值为多个集合成员或NULL

MySQL的日期与时间类型如表1-5所示。MySQL允许你存储某个“不严格地”合法的日期值,例如1999-11-31,原因我们认为它是应用程序的责任来处理日期检查,而不是SQL服务器。为了使日期检查更“快”,MySQL仅检查月份在0-12的范围,天在0-31的范围。

表1-5 MySQL的时间和日期列类型

类型名

涵义

DATE

一个日期,以'YYYY-MM-DD'格式来显示

TIME

一个日期和时间组合,以'YYYY-MM-DD HH:MM:SS'格式来显示

DATETIME

最大长度为255(2^8-1)个字符的BLOB或TEXT列

TIMESTAMP

一个时间戳,

以YYYMMDDHHMMSS格式来显示

原文地址:https://www.cnblogs.com/ryansunyu/p/4209010.html