综述
mysql中常用的数据类型有下面这些
整数类型
整型各类型的空间的值的区别
参数 | 所占字节 | 带符号最小值 | 无符号最小值 | 带符号最大值 | 无符号最大值 | |
---|---|---|---|---|---|
tinyint | 1 | -128 | 0 | 127 | 255 |
smallint | 2 | -32768 | 0 | 32767 | 622335 |
mediumint | 3 | -8388608 | 0 | 8388607 | 16777215 |
int | 4 | -2147483648 | 0 | 2147483647 | 4294967295 |
bigint | 8 | -9223372036854775808 | 0 | 9223372036854775807 | 18446744073709551615 |
注意:最大值和系统有关系,如windows32位和64的最大值是不一样的,windows和linux的最大值也是不一样的;
使用形式:
//类型名【(长度)】 【unsigned】 【zerofill】
tinyint(2) unsigned
说明:
1,长度:就是用来设定要“显示”的长度位数(数字个数),
2,unsigned:就是用于设定该类型中的数字没有符号(正负号),即没有负数;
3,zerofill:就是“填充0”的意思,即如果一个数字,没有达到指定的长度,则系统就会用0填充到其左边。
- 其中M表示“显示长度”,其需与zerofill结合使用才有效,即不够该长度的会自动左侧补0,当然如果超出也不影响。
- unsigned表示“无符号数”,表示其中的数值是“非负”数字
- 如果设置了zerofill,则自动也就表示同时具备了unsigned修饰
- 如果设置了zerofill但没有设定长度M,则其会默认将所有数的左边补0到该类型的最大位数
小数类型
浮点型:
单精度浮点型:float,其精度大约可以精确到6-7位;
双精度浮点型:double,其精度大约可以精确到15位左右;
特点:浮点型的小数,其内部的二进制形式,很可能是非精确的
定点型:
decimal,或使用dec。
形式:
//decimal(总精度,小数部分精度);
decimal(12,2)
说明:
1,总精度,其实就是可以用于精确表达的位数,包括小数部分的位数和整数部分的位数;
2,总精度最大为65位,小数部分的精度(位数),最大为30位。
字符类型
char类型:
定长字符串,表示设定的长度,其存储的时候,就是该长度——不够就会自动补空格填满;
最大可设定为255,表示可存储255个字符;
varchar类型:
变长字符串,表示设定的长度,是可存储的最大长度,实际存储长度可以小于该长度;
该类型存储的时候,还需要在字段内的最前面额外存储该字段的实际长度;
最大可设定为65533,表示最大可存储65533个字符;
因为考虑因素:一行的总的存储空间限制是65535字节,
但有考虑字符编码的问题,又会出现:
如果存储的是纯英文字符,则实际最多可存储65533个字符;
如果存储的是纯gbk的中文字符,则实际最多可存储的是65533/2个字符;
如果存储的是纯utf8的中文字符,则实际最多可存储的是65533/3个字符;
text类型:
它通常用于存储“大文本”,因为其可存储65535个字节,并且,不受行存储空间的限制;
enum类型:
用于存储若干个“可选项之一”的一种字符类型。
通常,是在字段定义时,预先设定多个选项,而且是作为单选项,实际存储数据的时候,就可以选择其中一个存入数据库。
它适合于存储在网页中的“单选项”数据,比如:单选按钮,下拉列表选项值等等;
形式:
enum(‘单选项1’, ‘单选项2’, ‘单选项3’, ....... ); //最多65535个。
说明:
这些选项,在系统内部,实际对应的是如下这些数字值:1, 2, 3, 4, 5, 6, ….
set类型:
用于存储若干个“多选项”的一种字符类型。
通常,是在字段定义时,预先设定多个选项,而且是作为多选项,实际存储数据的时候,就可以选择其中若干个选项值存入数据库。
它适合于存储在网页中的“多选项”数据,比如:多选按钮;
形式:
set(‘多选项1’, ‘多选项2’, ‘多选项3’, ....... ); //最多64个。
说明:
这些选项,在系统内部,实际对应的是如下这些数字值:1, 2, 4, 8, 16, ….
时间和日期类型
date类型:
用于存储(记录)年月日这种时间的数据,其范围可以为:’1000-01-01’到’9999-12-31’
time类型:
用于存储(记录)时分秒这种时间的数据,其范围可以为:’-838:59:59’到’838:59:59’
datetime类型:
用于记录年月日时分秒这种较为精确的时间数据,其范围为:’1000-01-01 00:00:00’到’9999-12-31 23:59:59’
year类型:
用于记录一个年份数据,通常就是指年份数字,比如2018,1983,其有两种形式:
使用一个数字:
2位数字:1-99之间
4位数字:1901-2155之间
使用一个字符串:
2位字符串:’00’到’99’
4位字符串:’1901’到’2155’
timestamp类型:
用于记录一个“当前时间”的精确的时间戳——也就是某个时刻的对应整数值;
该整数值,表示,从1970年1月1日0时0分0秒开始算起到该时候所经历的秒数;
而且,其有如下特征:
该字段的值,会在一个表的某行数据执行insert或update的时候,自动获取该时刻的时间戳值;
注意:
作为时间日期类型的数据,如果是在代码中插入一个具体的字面数据值,则需要用单引号引起来——跟字符类型一样。
如果是存时间戳的话可以直接用int类型,查询的时候效率更高