MySQL/语言/数据类型
VARCHAR 是 CHARACTER VARYING 的简写。'n' 代表最大列长度(最多 65,535 个字符)。VARCHAR(10) 列可以容纳最大长度为 10 个字符的字符串。实际所需的存储空间为字符串的长度 (L) 加上 1 或 2 个字节(如果长度 < 255 则为 1 个字节)来记录字符串的长度。
对于字符串 'abcd',L 为 4,存储需求为 5 个字节。
CHAR(n) 与 varchar(n) 类似,唯一的区别是 char 将在数据库中占用固定长度的空间,而 varchar 将需要空间来存储实际文本。因此,CHAR 字段占用更多存储空间,但在索引[1]情况下搜索速度快 20%。
BLOB 或 TEXT 列的最大长度为 65,535 个字符。所需的存储空间为存储数据的实际长度加上 2 个字节(如果长度 < 255 则为 1 个字节)。BLOB/TEXT 数据不存储在表的 data 文件中。这使得所有涉及 BLOB/TEXT 数据的操作(INSERT/UPDATE/DELETE/SELECT)变慢,但使得所有其他操作变快。
指定 n 值没有任何影响。无论为 n 提供什么值,存储的最大(无符号)值为 429 crores。如果要添加负数,请在它旁边添加“signed”关键字。
注意:要存储大于限制的数字(例如:1234567890123456789),软件可以告知操作已完成,即使实际上尚未完成。因此,在这种情况下,类型必须声明为 BIGINT
。
备注:布尔值声明为 tinyint(1)
。
整数类型后面括号中的数字表示存储的整数应显示的位数[2]。但是,如果它比这更长,它不会影响它的存储。
decimal(n,m) decimal(4,2) 表示最多可以保存 99.99 的数字(而不是您可能预期的 9999.99)。四个数字,最后两位保留给小数。
在三种类型 DATETIME、DATE 和 TIMESTAMP 中,DATE 类型用于您只需要日期值,而不需要时间部分的情况。MySQL 以 'YYYY-MM-DD' 格式检索和显示 DATE 值。DATETIME 类型用于您需要包含日期和时间信息的日期值的情况。DATETIME 和 TIMESTAMP 之间的区别在于 TIMESTAMP 范围限制在 1970-2037 年(见下文)。
TIME 可用于仅存储一天的时间(HH:MM:SS),不包括日期。它还可以用于表示时间间隔(例如:-02:00:00 表示“过去两个小时”)。范围:'-838:59:59' => '838:59:59'。
YEAR 可用于仅存储年份数字。
如果操纵日期,则必须指定实际日期,而不仅仅是时间 - 也就是说,MySQL 不会自动使用今天作为当前日期。相反,MySQL 甚至会将 HH:MM:SS 时间解释为 YY:MM:DD 值,这可能是无效的。
以下示例显示了基于 Unix 的时间戳的精确日期范围,该范围从 Unix 纪元开始,并在 通常的限制 (2038) 之前的第一个新年之前结束。
mysql> SET time_zone = '+00:00'; -- GMT Query OK, 0 rows affected (0.00 sec)
mysql> SELECT FROM_UNIXTIME(-1); +-------------------+ | FROM_UNIXTIME(-1) | +-------------------+ | NULL | +-------------------+ 1 row in set (0.00 sec) mysql> SELECT FROM_UNIXTIME(0); -- "Epoch" +---------------------+ | FROM_UNIXTIME(0) | +---------------------+ | 1970-01-01 00:00:00 | +---------------------+ 1 row in set (0.00 sec) mysql> SELECT FROM_UNIXTIME(2145916799); +---------------------------+ | FROM_UNIXTIME(2145916799) | +---------------------------+ | 2037-12-31 23:59:59 | +---------------------------+ 1 row in set (0.00 sec) mysql> SELECT FROM_UNIXTIME(2145916800); +---------------------------+ | FROM_UNIXTIME(2145916800) | +---------------------------+ | NULL | +---------------------------+ 1 row in set (0.00 sec)
SET 数据类型可以从创建表时指定的预定义字符串列表中保存任意数量的字符串。SET 数据类型类似于 ENUM 数据类型,因为它们都使用预定义的字符串集,但 ENUM 数据类型将您限制为预定义字符串集中的单个成员,而 SET 数据类型允许您从预定义的字符串集中存储任意值,从没有到全部。
示例
SET("madam", "mister") -- authorizes an empty field, "madam", "mister", "madam, mister", or "mister, madam"
ENUM("madam", "mister") -- authorizes an empty field, "madam" or "mister"