int(M)、char(M) 、varchar(M)的用法

MySQL中int、char、varchar的一般用法

1、int (M)

在MySQL中表中创建一个int类型的列,会发现有默认的 int(11),其中11表示此时int类型的最大长度,其中第一位表示符号+或者-,后面十位表示数字,因为10亿级别的位数正好是10位,

数值类型中的int 范围:(-2^31- 1 至 2 ^31-1)即(-2147483648,2147483647)
1)默认为int(11),其中的11只是指示显示长度,并不表示存储长度。
2)实际上数据类型括号内的数字不管是多少,所占的存储空间都固定的。
3)后面的数字,不代表占用空间容量。而代表最小显示位数
4)当输入的值的大小超出范围,则会存储为范围最大值

int所能设置的M长度范围是0~255。

  • 当输入M为0,或者不设置M的值的时候,会自动设置为11。
  • 当输入的数值是大于255的时候,会提示最大为255。

实际上与设置多少是没有区别的,效果和int(11)是一摸一样的。如设置一个int(1),本以为只能存储0~9,其实不然,他可以存储最多11位数字。+ / - 符号占一位,数据存储的范围是-2147483648 ~ 2147483647。

那么int后面指定的数到底是什么作用呢,只有在加入zerofill (0填充约束) 的时候,才能看出效果。如果int设置为int(4),当存储1的时候,那么展示的就是0001。
由此看出结论,int后面代表的是宽度。实际占用空间永远为4字节。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、varchar(M)

MySQL 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
MySQL 5.0版本以上,varchar(20),20表示的是长度,即指20个字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节 。

varchar(M), 在MySQL 5.0版本之后,M表示的是字符的个数,根据编码的不同,存储字符的个数也是不同的

  • 字符类型若为GBK,每个字符最多占2个字节,最大长度不能超过32766【32766*2=65532字节】;
    虽然一个英文字符实际占用一个字节,但是GBK定义字段时是默认以每个字符最大为2个字节来进行计算的,所以最大为varchar(32766)

  • (65535-1-2)/2= 32766。减1的原因是实际行存储从第二个字节开始;减2的原因是varchar头部的2个字节表示长度;除2的原因是字符编码是GBK

  • 字符类型若为UTF8,每个字符最多占3个字节,最大长度不能超过21844【21844*3=65532字节】
    虽然一个英文字符实际占用一个字节,但是utf-8定义字段时是默认以每个字符最大为3个字节来进行计算的,所以最大为varchar(21844)

  • (65535-1-2)/3= 21844。减1的原因是实际行存储从第二个字节开始;减2的原因是varchar头部的2个字节表示长度;除3的原因是字符编码是UTF8

3、char(M)

char(M) 的M是字符长度。最长为255个字符
一个多字节字符算作一个单字符,如1个汉字、1个数字,都被当成1个字符

4、char(M) 和varchar(M)的区别

char(M) varchar(M),M代表能存储的最多字符数,
1个英文、1个数字、1个中文都代表一个字符

4.1 区别1:定长和变长

在MySQL中,char和varchar都是用来存储字符串的,区别在于char有固定的长度,而varchar属于可变长的字符类型。

char有固定的的长度,所以在处理速度上要比varchar快很多,但是也相对更耗费存储空间,在速度上有要求的可以使用char类型

  • char类型是规定多少字长则必须存储多少字长,超过的字段则只能截取出对应的长度进行存储,相对于要去字长长度不够的字段则用空格补齐。
  • varchar类型则是只要在规定字长之内,有多少就存多少,无需补齐;超出部分和char一样,舍去即可

4.2 区别2:存储容量上

  • 对于char类型来说,最多只能存放的字符个数为255,和编码无关
    • 取值范围1-255字节,存储与编码无关,每个符号占用一个字节,最多存储255个字符
  • varchar最多能存放的字符由最大有效长度由最大行大小和使用的字符集来确定。
    • 取值范围0-65535字节,UTF8编码下数字、字母占用1字节,中文占用3字节,但是在存储时,都是以3字节来计算的。
    • 如UTF8编码下,最多存放21844个字符
    • (65535-1-2)/3 = 21844

在这里插入图片描述

在这里插入图片描述

4.3 区别3:在展示上

  • char会将保存值后的空格全部截取掉,
  • varchar则会保留。

4.4 区别4:在使用场景上

  • 当字段长度固定时,可以使用char类型以提高效率,如身份证号码(固定18号)等字段。
  • 当字段长度不固定时,可以使用varchar类型,兼容性更强

4.5 区别5:在书写场景上

char(M) M可以省略,默认为1;varchar(M),M不可以省略

4.6 区别汇总

对比charvarchar
最大长度255字符括号中最大的字符数通过编码来算,不超过行65535个字节
是否定长定长,不足的部分用隐藏空格填充不定长,保留实际字符
空间使用可能浪费更加节省
查找效率

备注:
个人见解,希望能给大家带来帮助,在写的过程中发现很多知识盲区,
总结一条,在经常使用的技术点的范畴下,尽可能多了解底层的一些知识点,对于自己的是有很大帮助的,共勉!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Oracle数据库中,CHARVARCHARVARCHAR2是三种不同的数据类型。CHAR是占据固定字节数的字符串类型,例如CHAR(20)表示该字段占用20个字节的存储空间,即使实际存储的字符串长度小于20,剩余的空间也会用空格填充。VARCHAR是标准的SQL写法,可以存储空字符串,而VARCHAR2是Oracle特有的数据类型,它也可以存储空字符串,但它的长度是实际存储的字符串的长度。 另外,对于整数类型,Oracle数据库中没有专门的INT类型,而是使用NUMBER类型来表示整数。NUMBER类型可以存储任意精度的数值,包括整数和小数。在Oracle中,建议使用NUMBER类型而不是INT类型来表示整数。 总之,CHARVARCHARVARCHAR2是字符串类型,它们在存储方式和用法上有些许区别,而NUMBER类型则用于表示数值类型,可以包括整数和小数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [详解Oracle数据库int、number类型和charvarcharvarchar2类型的区别](https://blog.csdn.net/qq_28721869/article/details/118525727)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [解决mybatis使用char类型字段查询oracle数据库时结果返回null问题](https://download.csdn.net/download/weixin_38672807/12758391)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值