(面试)MySQL中INT(5)和VARCHAR(20)中括号内的数字表示什么,以及VARCHAR与CHAR的区别

    一、首先,INT类型数据的字节大小是固定的4个字节,但是int(5)和int(11)区别在于,显示的数据位数一个是5位一个是11位,在开启zerofill(填充零)情况下,若int(5)存储的数字长度是小于5的则会在不足位数的前面补充0,但是如果int(5)中存储的数字长度大于5位的话,则按照实际存储的显示(数据大小在int类型的4个字节范围内即可),也就是说int(M)的M不代表数据的长度。

      对于数值类型是定长的,也就是说,无论你存的数值是多少,多大或者多小,占用的字节大小都是固定的。例如,之前设置的int(1),虽然M值是1个字符,但是它所占用的空间大小永远都是4个字节的大小,换句话说就是,你可以存入有符号整型从-2 147 483 648到2 147 483 647包括这两个数的中间任何一个数。int(1)和int(11)占用的是4个字节,可以存入上述这些数,tinyint(1)和tinyint(4)占用的是1个字节,可以存入从-128到127的数,这也是为什么之前的一次试验,int(1)插入128成功,而tinyint(1)插入128却提示超出长度。   

     而varchar(20)中的20表示的是varchar数据的数据长度最大是20,超过则数据库不会存储。    

     VARCHAR列中的值为可变长字符串,长度可以指定为0到65535之间的值。VARCHAR的最大有效长度由最大行大小和使用的字符集确定。在MySQL 4.1之前的版本,VARCHAR(50)的“50”指的是50字节(bytes,如果存放UTF8汉字时,那么最多只能存放16个(每个汉字3字节);从MySQL 4.1版本开始,VARCHAR(50)的“50”指的是50字符(character),无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放50个。

总结:INT(M) 中M表示的不是数据的最大长度,只是数据宽度,并不影响存储多少位长度的数据;        

          varchar(M) 中M表示的是varchar类型数据在数据库中存储的最大长度,超过则数据库不会存储。

    二、CHAR是一种固定长度的类型,VARCHAR则是一种可变长度的类型。

     CHAR列的长度固定为创建表时声明的长度,长度可以为从0到255的任何值。当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

     CHAR和VARCHAR类型声明的长度表示保存的最大字符数。例如,CHAR(30)可以占用30个字符。对于MyISAM表,推荐CHAR类型;对于InnoDB表,推荐VARCHAR类型。另外,在进行检索的时候,若列值的尾部含有空格,则CHAR列会删除其尾部的空格,而VARCHAR则会保留空格。 

参考https://blog.csdn.net/aa_11_bb_22/article/details/80352996https://blog.csdn.net/qq_31648761/article/details/78270567https://blog.csdn.net/u014143369/article/details/60386547https://blog.csdn.net/qq_33412610/article/details/77962267

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQLint(10)和char(10)和varchar(10)的区别如下: 1. int(10)表示整数类型括号数字10代表的是显示数据的长度,并不是存储数据的长度。int类型在存储时会根据实际的数大小来自动调整占用的空间,不受显示长度的限制。例如,int(10)和int(1)所能存储的数字大小以及占用的空间都是相同的,只是在展示时按照长度展示。 2. char(10)是固定长度的字符类型括号数字10表示存储数据的长度。char类型会将数据存储为固定长度的字符串,如果存储的数据长度不足10,则会用空格进行充。 3. varchar(10)是可变长度的字符类型括号数字10表示申请了最大长度为10的空间,但实际占用的空间取决于存储的数据长度。varchar类型只会占用实际存储数据所需的空间,不会额外充空格。 综上所述,int(10)和char(10)和varchar(10)的区别在于数据类型和存储方式的不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MySQL int(10) 和 char(10) 的区别charvarchar区别 以及 exists 和 in 的区别?](https://blog.csdn.net/qq_36580990/article/details/125207821)[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%"] - *2* [MySQL理论知识面试题](https://blog.csdn.net/weixin_45218371/article/details/120338630)[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、付费专栏及课程。

余额充值