ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql字段类型(数据类型详解 | char与varchar优缺点

2022-01-24 19:34:14  阅读:227  来源: 互联网

标签:insert 存储 varchar into 数据类型 char values


目录

字段类型(数据类型)

整形

# 在mysql中不同类型的int能够存储的数字范围不一样
tinyint   : 1bytes
smallint  : 2bytes
int       : 4bytes
bigint    : 8bytes

# 验证不同类型的int是否会空出一位存储正负号:
    create table t6(id tinyint);
    insert into t6 values(256),(-129);
# 得出结论:tinyint默认会空出一位存储正负号

其实所有的int类型默认都会空出一位存储正负号

去除正负号

添加参数:unsigned

create table t7(id tinyint unsigned);
insert into t7 values(256),(-1);

浮点型

float(255,30)  : 总共255位,小数占30位。
double(255,30) : 总共255位,小数站30位。
decimal(65,30) : 总共65位,小数站30位。

# 验证三者有什么不一样之处
create table t8(id float(255,30));
create table t9(id double(255,30));
create table t10(id decimal(65,30));
insert into t8 values(1.22222222222222222222222222);
insert into t9 values(1.22222222222222222222222222);
insert into t10 values(1.22222222222222222222222222);

结论:三者精确度不同 decimal > double > float 具体使用要结合实际情况

字符类型char()与varchar()

char(4) : 定长
    最多存储4个字符 超出了则报错 没超出则用空格填充
    
varchar(4) : 变长
    最多存储4个字符 超出了则报错 没超出则有几个存储几个

验证:

create table t11(id int,name char(4));
create table t12(id int,name varchar(4));
insert into t11 values(1,'kelala')
insert into t12 values(1,'kelala')

上述我们发现:当数据超出时并没有报错而是失真了 如果出现这种情况就是在该配置文件的时候漏掉了一个严格模式的代码(SQL_MODE)

修改:SQL_MODE

1、模糊查询
	show variables like '%mode%';

2、修改方式
    set session sql_mode=strict_trans_tables  #  只在当前操作页面有效
    set global sql_mode=strict_trans_tables  #  全局有效
    也可以直接修改配置文件
    	sql_mode=strict_trans_tables
 
# 修改完需要退出客户端重新登录
    exit
    mysql

再次验证

研究数字在数字类型与类型中的区别

上述语法格式中有很多字符类型后加了一个数字(4)那么他到底是什么意思呢我们来验证一下;

1、验证数字在数字类型中是否是用来限制长度的
    create table t14(id int(4));
    insert into t14 values(1111111);

结论:数字在数字类型中并不是用来限制存储长度的,而是用来控制展示长度的

#  运用zerofill 0填充的方法来验证

create table t15(id int(8) unsigned zerofill);  # unsigned 去除正负号
insert into t15 values(1111);
insert into t15 values(111111111);

结论:以后遇到数字类型不要制定数字,让他使用自带的即可

char()与varchar()数字的差异

char(4) : 定长
    最多存储4个字符 超出了则报错 没超出则用空格填充
    
varchar(4) : 变长
    最多存储4个字符 超出了则报错 没超出则有几个存储几个
1、验证char与varchar定长特性:
    create  table t16(id int,name char(5));
    insert into t16 values(1,'tom');
    
    create table t17(id int,name varchar(5));
    insert into t17 values(1,'tom');

因为mysql底层有一个优化:在存储到硬盘中是确实是5个字符不够的以空格填充 但是在读取的时候自动优化去除了空格填充的部分。

验证:

方法:统计某个字段数据对应的长度
	char_length()
用法: select char_length(name) from t16;
 
# 上述方法还是无法验证,需要取消底层优化操作
    set global sql_mode='strict_trans_tables,pad_char_to_full_length'
    exit
    mysql # 重启客户端

可以看到varchar确实是存储几个就是几个

char与varchar到底那个好呢

各自的优缺点:
	char  
    	优势 :整存整取 速度快
         劣势 :浪费存储空间
  #  char在存储时:固定了字符的长度不够的会空格填充。在取得时候固定取存时候的长度即可

  	varchar
    	优势 : 节省存储空间
        劣势 : 存取数据都需要先考虑报头 速度相较于char慢
  #  varchar在存储时: 没有固定字符的长度。在每次取得时候会有一个报头,先取报头然后再取真实数据     
            在存储数据长度差异不大的时候使用char
数据长度差异很大的情况下使用varchar

结论:所以在存储数据长度差异不大得时候使用char,数据长度差异很大情况下使用varchar

标签:insert,存储,varchar,into,数据类型,char,values
来源: https://www.cnblogs.com/jjjmhf50/p/15840641.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有