Mysql中的数据类型

来源:互联网 发布:2016网络写手收入排行 编辑:程序博客网 时间:2024/05/02 04:20
一、概述
MySQL 支持大量的列类型,它可以被分为 3 类:数字类型、日期和时间类型以及字符串(字符)类型。
MySQL 有几种数据类型,下面一一介绍。

1、字符串值
字符串是类似"I like mysql."和'MySQL is powerful.'等这样的值,它们既可以用双引号括起来,也可以是用单引号。在字符串中不仅可以使用普通的字符,也可使用几个转义序列,它们用来表示特殊的字符,而不是普通字符。注意 NUL 字节与 NULL 值不同; NUL 为一个零值字节,而
NULL 代表没有值。
例如如下语句查询的结果:
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+

2、数字值
MySQL 中的数字是类似于 100 或 3.1215936 这样的值。 MySQL 支持说明为整数(无小数部分)或浮点数(有小数部分)的值:
整数由数字序列组成。浮点数由一个阿拉伯数字序列、一个小数点和另一个阿拉伯数字序列组成。两个阿拉伯数字序列可以分别为空,但不能同时为空。
MySQL 支持科学表示法。科学表示法由整数或浮点数后跟“ e”或“ E”、一个符号(“ +”或“ -”,必须具有)和一个整数指数来表示。
数值前可放一个负号“ -”以表示负值。
例如,下面都是合法的数值:
整数值: 1221 0 -32
浮点数: 294.42 -32032.6809e+10 148.
下面的值是错误的:
1.34E12(没有符号标示)

3、十六进制
MySQL 支持十六进制值。以十六进制形式表示的整数由“ 0x”后跟一个或多个十六进制数字(” 0”到“ 9”及“ a”到“ f”)组成。例如, 0x0a 为十进制的 10,而 0xffff 为十进制的 65535。十六进制数字不区分大小写,但其前缀“ 0x”不能为“ 0X”。即 0x0a 和0x0A 都是合法的,但 0X0a 和 0X0A 不是合法的。

4、日期和时间值
日期和时间值是一些类似于“ 1999-06-17”或“ 12:30:43”这样的值。 MySQL 还支持日期/时间的组合,如“ 1999-06-17 12:30:43”。需要要特别注意的是, MySQL 是按年-月-日的顺序表示日期的。

5、NULL 值
NULL 值可适用于各种列类型,它通常用来表示“没有值”、 “无数据”等意义,并且不同于例如数字类型的 0 为或字符串类型的空字符串。

二、Mysql的列类型详述
MySQL 的列类型是一种手段,通过这种手段可以描述一个表列包含什么类型的值,这又决定了 MySQL 怎样处理这些值。例如,数值值既可用数值也可用串的列类型来存放,但是根据存放这些值的类型, MySQL 对它们的处理将会有些不同。每种列类型都有几个特性如下:
1、其中可以存放什么类型的值。
2、值要占据多少空间,以及该值是否是定长的(所有值占相同数量的空间)或可变长的(所占空间量依赖于所存储的值)。
3、该类型的值怎样比较和存储。
4、此类型是否允许 NULL 值。
5、此类型是否可以索引。
下面是创建一个表的例子:
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 的数字类型下图所示,包括浮点类型和整数类型:

在为列选择了使用某种数值类型时,除了要考虑数据的类型外,还应该注意所要表示的值的范围和存储需求,只需选择能覆盖要取值的范围的最小类型即可。选择较大类型会对空间造成浪费,使表不必要地增大,处理起来没有选择较小类型那样有效。对于整型值,如果数据取值范围较小,则 TINYINT 最合适。 MEDIUMINT 和 INT 虽然能表示能够表示更大的数值并且可用于更多类型的值,但存储代价更大。 BIGINT 在全部整型中取值范围最大,而且需要的存储空间是表示范围次大的整型 INT 类型的两倍,因此只在确实需要时才用。

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

对于所有串类型,都要剪裁过长的值使其适合于相应的串类型。但是串类型的取值范围很不同,有的取值范围很小,有的则很大。取值大的串类型能够存储近 4GB 的数据。因此,应该使串足够长以免您的信息被切断(由于受客户机/服务器通信协议的最大块尺寸限制,列值的最大限额为 24MB)。另外,对于串类型,在比较时是忽略大小写的,使用 BINARY关键字,则比较时采用ASCII 码的方式,即不再忽略大小写。可以使用 BINARY的串类型为 CHAR和 VARCHAR。

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

DATETIME 类型用在你需要同时包含日期和时间信息的值时。 MySQL 检索并且以'YYYY-MM-DD HH:MM:SS'格式显示 DATETIME 值,支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。(“支持”意味着尽管更早的值可能工作,但不能保证他们可以。)
DATE 类型用在你仅需要日期值时 ,没有时间部分。 MySQL检索并且以'YYYY-MM-DD'格式显示 DATE 值,支持的范围是'1000-01-01'到'9999-12-31'。
TIMESTAMP 列类型提供一种类型,你可以使用它自动地用当前的日期和时间标记INSERT 或 UPDATE 的操作。如果你有多个 TIMESTAMP 列,只有第一个自动更新。TIMESTAMP 值可以从 1970 的某时的开始一直到 2037 年,精度为一秒,其值作为数字显示。


0 0