mysql 的基本类型

333 阅读2分钟

整型

mysql 中存储整数,可以有如下几种

类型长度
TINYINT8
SMALLINT16
MEDIUMINT24
INT32
BIGINT64

每种类型存储数据的范围从 2N1-2^{N-1}2N112^{N-1} - 1,其中N是存储空间的位数。

MYSQL 可以为整数类型制定宽度,例如INT(11)。这个对大多数应用都是没有意义的: 它不会限制值得合法范围,只是规定了 MYSQL 的一些交互工具(例如 MYSQL 的命令行客户端)用来显示字符的个数。对于存储和计算来说, INT(1)INT(20)是相同的。

经过实践(可能是版本问题),并没有像上文说的有命令行客户度显示字符的个数的作用,创建表和查询表的结果如下:

CREATE TABLE `parameters` (
  `id` int(4) unsigned NOT NULL,
  `title` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
mysql> select * from parameters;
+----------+--------+
| id       | title  |
+----------+--------+
|        1 | title |
|     1000 | title |
|    10000 | title |
| 10000000 | title |
+----------+--------+

又在 stackoverflow查看了此问题, 其中说了 int(M)中的M对实际存储数据的长度并无影响,在展示的时候可能会有影响。如果对此字段增加了zerofill选项,那么不足长度M会使用 0 来进行填充,超过长度的并无影响。所以说在增加了填充选项的时候,int(M)中的 M 才发挥作用,但是其作用仅仅局限于客户端的展示,对实际存储的值并无影响。

CREATE TABLE `new_parameters` (
  `id` int(4) unsigned zerofill NOT NULL,
  `title` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
mysql> select * from new_new_parameters;
+-------+-------+
| id    | title |
+-------+-------+
|  0001 | title |
| 10000 | title |
+-------+-------+
2 rows in set (0.00 sec)

字符串

VARCHAR 类型用于存储可变长的字符串,是最常见的字符串数据类型。它比定长类型更节省空间,因为它仅适用必要的空间(例如,越短的字符串适用越少的空间)。VARCHAR 需要使用 1或 2 个额外的字节记录字符串的长度: 如果列的长度小于或等于 255 字节,则只使用1 字节表示,否则使用 2 个字节表示。这也是很多地方都用VARCHAR(255)的原因。

本文摘选自《高性能MySQL》