整型
mysql 中存储整数,可以有如下几种
类型长度TINYINT8
SMALLINT16
MEDIUMINT24
INT32
BIGINT64
每种类型存储数据的范围从 −2N−1-2^{N-1}−2N−1 到 2N−1−12^{N-1} - 12N−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》