Mysql - 数据库表字段类型3种:文本、数字、时间 和 全部类型
3种常用数据类型:文本/时间/日期
一、文本/字符串类型
1、char
2、varchar
3、tinytext
4、text
5、mediumtext
6、longtext
7、enum
8、set
char 和 varchar 都是用来存储字符串类型的数据,但是他们保存和检索的方式不一样,char 属于固定长度的字符类型,varchar 属于可变长的字符类型。
gbk 一个字符 ,两个字节 ; Unicode 一个字符,两个字节
例如:
值 | char(4) | 字节 | varchar(4) | 字节 |
---|---|---|---|---|
‘’ | ‘’ | 8个字节 | ’‘ | 1个字节 |
‘ab’ | ‘ab’ | 8个字节 | ‘ab’ | 5个字节 |
‘abcd’ | ‘abcd’ | 8个字节 | ‘abcd’ | 9个字节 |
‘abcdefg’ | ‘abcd’ | 8个字节 | ‘abcd’ | 9个字节 |
utf8 一个字符 ,三个字节
例如:
值 | char(4) | 字节 | varchar(4) | 字节 |
---|---|---|---|---|
‘’ | ‘’ | 12个字节 | ’‘ | 1个字节 |
‘ab’ | ‘ab’ | 12个字节 | ‘ab’ | 7个字节 |
‘abcd’ | ‘abcd’ | 12个字节 | ‘abcd’ | 13个字节 |
‘abcdefg’ | ‘abcd’ | 12个字节 | ‘abcd’ | 13个字节 |
由于 char 是固定长度的,所以它的处理速度比 varchar 快得多,但是其缺点是浪费存储空间,程序需要对尾行空格进行处理,所以对那些变化不大并且查询速度有较高的要求的数据可以考虑使用 char 类型存储。
在 MySQL 中,不同的存储引擎对 char 和 varchar 的使用原则有所不同。
MyISAM 存储引擎
- 建议使用固定长度的数列代替可变长度的数据列
InnoDB 存储引擎
- 建议使用 varchar 类型,对于 InnoDB 数据表,内部的行存储格式没有区分固定长度和可变长度,因此使用 char 列不一定比可变长度的 varchar 性能好
- 由于 char 平均占用空间多于 varchar ,因此 varchar 要消化需要处理的数据行的存储总量和磁盘 I/O 是比较好的
二、数字类型
数据类型 | 范围 | 字节 |
---|---|---|
1、bigint | -2^63 (-9,223,372,036,854,775,808) 到 2^63-1(9,223,372,036,854,775,807) | 8字节 |
0到18446744073709551615 | 较大整数 | |
2、int | -2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647) | 4个字节 |
0到4294967295 | 标准整数 | |
3、smallint | -2^15 (-32,768) 到 2^15-1 (32,767) | 2字节 |
0到65535 | 较小整数 | |
4、tinyint | -2^7 (-128) 到 2^7 - 1 (123) | 1字节 |
0到255 | 非常小的整数 | |
5、float[(m,d)] | ±1.175494351e - 38 ( 单精度浮点数) | 4字节 |
6、double[(m,d)] | ±2.2250738585072014e - 308 (双精度浮点数) | 8字节 |
7、decimal(m,d) | 可变;其值的范围依赖于m 和d (一个串的浮点数) | m+2字节 |
id 必为主键,类型为 int bigint unsigned ,单表时自增、步长为 1;注意一下因为一些表可能因为数据量的关系导致主键会很大可能会超出 int 的范围这个时候就比较建议使用 bigint ,通常 int 即可。
注:不过当一个表数据量超过了500万的时候或者单表容量超过 2GB 的时候推荐分库分表;这一步操作是需要事先对于数据量在项目上线之后的思考点
UNSIGNED 属性就是将数字类型无符号化 ,unsigned 的使用
注意 unsigned tinyint 的范围就是 0 - 255
三、时间类型
1、date
2、datetime
3、timestamp
4、time
5、year
date:以YYYY-MM-DD格式存储数据。它允许1000-01-01到9999-12-31之间的值。
datetime:以YYYY-MM-DD HH:MM:SS格式存储数据。
用法:datetime[null | not null][default]
timestamp : format可以是2到14间的任意数字。
用法:timestamp(format)
下面是format数字的对照列表: YY、YYMM、YYMMDD、YYYYMMDD、YYMMDDHHMM、YYMMDDHHMMSS 、YYYYMMDDHHMMSS
全部类型