三、MySQL数据类型

字符类型

  • 定长char

    定长:char(字符个数)
    	- 不指定宽度默认为1
    	- 最大字符数255
    	- 不够指定字符个数时在右边用空格补全
    	- 字符个数超出时,无法写入数据库
    
  • 变长varchar

    变长:varchar(字符个数)
    	- 使用时必须指定宽度
    	- 最大存储65532(utf8编码最大支持21843)
    	- 按数据实际大小分配存储空间
    	- 字符个数超出时,无法写入数据
    大文本类型:text/blob
    	- 字符串大于65535存储时使用
    	- 在实际使用中,很少使用大文本类型
    

    一篇文章看懂mysql中varchar能存多少汉字、数字,以及varchar(100)和varchar(10)的区别

  • 整型

    类型 名称 有符号范围 无符号范围
    tinyint 微小整型 -128 ~ 127 0 ~ 255
    smallint 小整型 -32768 ~ 32767 0 ~ 65535
    mediumint 中整型 -2**23 ~ 2**23-1 0 ~ 2**24-1
    int 大整型 -2**31 ~ 2**31-1 0 ~ 2**32-1
    bigint 极大整型 -2**63 ~ 2**63-1 0 ~ 2**64-1
    unsigned 使用无符号存储范围
    create table info1( age tinyint );
    create table info1( age tinyint unsigned );
    create table info2( age int unsigned );
    
  • 浮点型

    create table info3( mon float(7,2) );	# 总长度7,负数占两位(正数5位) 存整型时,自动补两位小数位 
    
    类型 名称 有符号范围 无符号范围
    float 单精度 0 ~ 2**32-1
    double 双精度 0 ~ 2**64-1

时间类型

  • 日期时间datetime

    - 范围: 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
    - 格式: yyyymmddhhmmss(YYYY-MM-DD HH:MM:SS)
    
  • 日期时间timestamp

    - 范围: 1970-01-01 00:00:00 ~ 2038-01-19 00:00:00
    - 格式: yyyymmddhhmmss
    
  • 日期 date

    - 范围: 0001-01-01 ~ 9999-12-31	
    - 格式: yyyymmdd(YYYY-MM-DD)
    
  • 年 year

    - 范围: 1901 ~ 2155		
    - 格式: yyyy
    
    year类型
    	- 要求使用4位数赋值
    	- 当使用2位数赋值时
    		- 01~69视为 2001~2069
    		- 70~99视为 1970~1999
    
  • 时间time

    - 格式: hhmmss(HH:MM:SS)
    
    mysql> create table info5(name char(10),  年 year, 日期 date, 时间 time, 日期时间 datetime);
    
    mysql> insert into info5 values("tom",2014,070621,111111,19920213091214);
    mysql> insert into info5 values("tom", '2014', '07-06-21', '11:11:24', '1992-02-13 09:12:14');
    
  • 关于时间与日期时间段

    - 当未给timestamp字段赋值是,自动以当前系统时间赋值,而datetime值为空
    
    mysql> create table info6(meetting datetime,party timestamp);
    
    mysql> insert into info6 values(now(),now());
    mysql> insert into info6(meetting) values(now());
    mysql> insert into info6(party) values(now());
    
    mysql> select * from info6;
    +---------------------+---------------------+
    | meetting            | party               |
    +---------------------+---------------------+
    | 2021-11-04 23:13:54 | 2021-11-04 23:13:54 |
    | 2021-11-04 23:14:08 | 2021-11-04 23:14:08 |
    | NULL                | 2021-11-04 23:14:22 |
    +---------------------+---------------------+
    
  • 时间函数

    MYSQL服务的内置命令,可以使用时间函数给字段赋值
    
    curtime()		# 获取当前的系统时间
    curdate()		# 获取当前的系统日期
    now()			# 获取当前的系统日期和时间
    
    year()			# 获取年
    month()			# 获取月
    day()			# 获取日
    date()			# 获取日期
    time()			# 获取时间
    
    mysql> insert into info5 values("tom",2014,curdate(),curtime(),now());
    mysql> insert into info5 values("tom",now(),now(),now(),now());		# 只存存储与自己类型匹配的
    
    mysql> select curdate();
    mysql> select curtime();
    mysql> select now();
    
    mysql> select year(now());
    mysql> select month(now());
    mysql> select day(now());
    mysql> select date(now());		# 和curdate相同
    mysql> select time(now());		# 和curtime相同
    
    mysql> select day(curdate());
    mysql> select day(20180213);
    

枚举类型

枚举类型(字段值,只能在列举的范围里选择)

  • enum 单选

    - 格式:字段名 enum(值1, 值2, 值n)
    - 仅能选择一个值
    - 字段值必须在列表里选择
    
    mysql> create table info7(name char(5), sex enum('boy', 'girl', 'no'));
    
    mysql> insert into info7 values('qiqi', 'boy');
    
    mysql> insert into info7 values('qiqi', 'buzh');		# 不在选择列表中,不能插入
    ERROR 1265 (01000): Data truncated for column 'sex' at row 1
    
  • set 多选

    - 格式: 字段名 set(值1, 值2, 值N)
    - 选择一个或多个值
    - 字段值必须在列表里选择
    
    mysql> create table info8(name char(5), likes set('eat','game','money','std'));
    
    mysql> insert into info8 values("heh","eat,game");
    
posted @ 2021-11-16 10:36  CatdeXin  阅读(60)  评论(0)    收藏  举报