mysql中的varchar(10)和 int(11)是什么意思?

Posted 高高for 循环

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中的varchar(10)和 int(11)是什么意思?相关的知识,希望对你有一定的参考价值。


字符 和 字节


字节(Byte)

  • 字节(Byte)是一种计量单位,表示数据量多少,它是计算机信息技术用于计量存储容量的一种计量单位。

字符(char)

  • 字符是指计算机中使用的文字和符号,比如1、2、3、A、B、C、~!·#¥%……—*()——+、,中,国等等

编码格式:

java – 变量 8中基本类型

char 型变量中能存储一个中文汉字,为什么?

char 类型可以存储一个中文汉字,因为 Java 中使用的编码是Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个字节(16比特),所以放一个中文是没问题的。

字符和字节不存在绝对的关系,只是在不同的编码格式里,对应的比值不一样。比如:

  1. UTF-8编码中
    一个英文字符等于一个字节,一个中文(含繁体)字符等于三个字节

  2. Unicode编码中,
    一个英文等于两个字节,一个中文(含繁体)字符等于两个字节
    符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

  3. GBK编码中,
    一个英文等于一个字节,一个中文(含繁体)字符等于两个字节

  4. UTF-16编码中,
    一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

  5. UTF-32编码中,
    世界上任何字符的存储都需要4个字节。

char(5)和varchar(10)括号中的数字含义

char----列长度是固定:

  1. char的列长度是固定的
  2. char的长度可选范围在0-255字符之间。也就是char最大能存储255个字符.
  3. CHAR(M)定义的列的长度为固定的,M取值可以为0-255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,

案例:

比如定义char(10),那么不论你存储的数据是否达到了10个字符,都要占去10个字符的空间,不足的自动用空格填充。

varchar----列长度是可变的

  1. varchar的列长度是可变的
  2. ,在mysql5.0.3之前varchar的长度范围为0-255字符,mysql5.0.3之后varchar的长度范围为0-65535个字节.
  3. VARCHAR(M)定义的列的长度为可变长字符串,VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。varchar存储变长数据,但存储效率没有CHAR高。
  4. VARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度。

案例:

varchar(10)的意思是可以存储的最大字符串长度为10个字符,并且字符是变长的,如果不满10个就根据实际存储的字节来确定,即存储空间为0~10个字符。

varchar(10)表示可以存储的最大字符串长度为10个字符

对比char(10)和varchar(10)

  1. 如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。

  2. 从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

int(11)是什么意思?

这些类型,是定长的,其容量是不会随着后面的数字而变化的

比如int(11)和int(8),都是一样的占4字节。tinyint(1)和tinyint(10)也都占用一个字节。

那么后面的11和8,有啥作用呢?

数据类型(m)中的m不是表示的数据长度,而是表示数据在显示时显示的最小长度。tinyint(1) 这里的1表示的是 最短显示一个字符。tinyint(2) 这里的2表示的是 最短显示两个字符。

规则:

  • 当字符长度(m)超过对应数据类型的最大表示范围时,相当于啥都没发生;
  • 当字符长度(m)小于对应数据类型的表示范围时,就需要指定拿某个字符来填充,比如zerofill(表示用0填充)
  • 设置tinyint(2) zerofill 你插入1时他会显示01;设置tinyint(4) zerofill 你插入1时他会显示0001。

即使你建表时,不指定括号数字,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。

int(11)案例:

  • 建立一张表

  • 插入若干条记录,如下:
  • 如上所示,navicat是看不出填充0的效果的。得用原生的mysql客户端查看,如下所示:

可以看到,如果字段值的宽度不足11,并且如果开启了填充0的功能,那么可以看到字段值是会自动填充0直到达到int(11)括号中的数字的值。

以上是关于mysql中的varchar(10)和 int(11)是什么意思?的主要内容,如果未能解决你的问题,请参考以下文章

oracle转Mysql中,varchar2(10)和number应该转换为什么类型? (转)

MYSQL INNODB主键使用varchar和int有什么区别?

在 MySQL 中将 int 转换为 varchar 数据类型

varchar 和 int mysql 数据类型的默认值

Mysql数据类型

oracle 和mysql之间的数据类型对比