mysql-05mysql支持的数据类型

时间:2019-09-21
本文章向大家介绍mysql-05mysql支持的数据类型,主要包括mysql-05mysql支持的数据类型使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一丶整型

  • 分类:TINYINT SMALLINT MEDIUMINT INT BIGINT

  • 作用:存储年龄,等级,id,各种号码等

tinyint 1字节(-128)

int 4字节(一般来讲不用设置,因为基本够用)

bigint 8字节

类型存储范围:参考图片<http://www.cnblogs.com/linhaifeng/articles/7233411.html

类型后面的宽度不能改变字段存储的大小限制!!!!!

强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度, 默认的显示宽度,足够显示完整当初存放的数据

严格模式补充
我们刚刚在上面设置了char,tinyint,存储数据时超过它们的最大存储长度,发现数据也能正常存储进去,只是mysql帮我们自动截取了最大长度。但在实际情况下,我们应该尽量减少数据库的操作,缓解数据库的压力,让它仅仅只管理数据即可,这样的情况下就需要设置安全模式

show variables like "%mode%";  # 查看数据库配置中变量名包含mode的配置参数
# 修改安全模式
set session # 只在当前操作界面有效
set global  # 全局有效

set global sql_mode ='STRICT_TRANS_TABLES'
# 修改完之后退出当前客户端重新登陆即可

二丶浮点型

  • 分类:FLOAT DOUBLE decimal
  • 应用场景:身高,体重,薪资

字段限制特点(5,3)前一位表示所有的位数,后一位表示小数个数

用法列子

# 存储限制
float(255,30)
double(255,30)
decimal(255,30)

# 精确度验证
create table t9(x float(255,30));
create table t10(x double(255,30));
create table t11(x decimal(65,30));

insert into t9 values(1.111111111111111111111111111111);
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);

最终结果相对数字t9, t10会邮精度缺失, 由此说明decimal的精度会高于double和float,而double的精度会高于float!!!

三丶字符类型(char与varchar)

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

  • 分类
    • char(定长)默认为1字节
    • varchar(变长)默认为1字节
  • 作用:姓名,地址,描述类信息
create table t10(name char(4))  # 超出四个字符报错,不够四个字符空格补全
create table t11(name varchar(4))  # 超出四个字符报错,不够四个有几个就存几个

# 验证存储限制
insert into t12 values('hello');
insert into t13 values('hello');
# 验证存储长度
insert into t12 values('a'); #'a    '
insert into t13 values('a'); #'a'
select * from t12
select * from t13  # 无法查看真正的结果

select char_length(name) from t12
select char_length(name) from t13  # 仍然无法查看到真正的结果

"""首先应该肯定的是在硬盘上存的绝对是真正的数据,但显示的时候mysql会自动将末尾的空格取掉"""
# 如果不想让mysql帮你做自动去除末尾空格的操作,需要再添加一个模式
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
# 退出客户端重新登陆
select char_length(x) from t12; #4
select char_length(y) from t13; #1

# 针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中。但是会在读出结果的时候自动取掉末尾的空格


"""
char与varchar的使用区别
"""
name char(5)
# 缺点:浪费空间
# 优点:存取速度都快
egon alex lxx  jxx  txx  

name varchar(5)
# 缺点:存取速度慢
# 优点:节省空间
1bytes+egon 1bytes+alex 1bytes+lxx  1bytes+jxx  1bytes+txx 

四丶日期类型

  • 分类

    • date:2019-05-01
    • time:11:11:11
    • Datetime: 2019-01-02 11:11:11
    • Year:2019
  • 测试

    create table student(
      id int,
      name char(16),
      born_year year,
      birth date,
      study_time time,
      reg_time datetime
    );
    insert into student values(1,'egon','2019','2019-05-09','11:11:00','2019-11-11 11:11:11');

五丶枚举与集合

  • 分类

    • 枚举enum 多选一
    • 集合set 多选多
  • 测试

    create table user(
      id int,
      name char(16),
      gender enum('male','female','others')
    );
    insert into user values(1,'jason','xxx');  # 报错
    insert into user values(2,'egon','female');  # 正确!
    
    
    create table teacher(
      id int,
      name char(16),
      gender enum('male','female','others'),
      hobby set('read','sleep','sanna','dbj')
    );
    insert into teacher values(1,'egon','male','read,sleep,dbj');  # 集合也可以只存一个

原文地址:https://www.cnblogs.com/suren-apan/p/11561994.html