MySQL中字段类型与合理的选择字段类型;int(11)最大长度是多少?varchar最大长度是多少?

字段类型

数值

MySQL 的数值数据类型能够大体划分为两个类别,一个是整数,另外一个是浮点数或小数。
许多不一样的子类型对这些类别中的每个都是可用的,每一个子类型支持不一样大小的数据,而且 MySQL 容许咱们指定数值字段中的值是否有正负之分(UNSIGNED)或者用零填补(ZEROFILL)。mysql

clipboard.png

MySQL 以一个可选的显示宽度指示器的形式对 SQL 标准进行扩展(如 INT(6),6便是其宽度指示器,该宽度指示器并不会影响int列存储字段的大小,也就是说,超过6位它不会自动截取,依然会存储,只有超过它自己的存储范围才会截取;此处宽度指示器的做用在于该字段是否有zerofill,若是有就未知足6位的部分就会用0来填充),这样当从数据库检索一个值时,能够把这个值加长到指定的长度。例如,指定一个字段的类型为 INT(6),就能够保证所包含数字少于 6 个的值从数据库中检索出来时可以自动地用空格填充。须要注意的是,使用一个宽度指示器不会影响字段的大小和它能够存储的值的范围。
万一咱们须要对一个字段存储一个超出许可范围的数字,MySQL 会根据容许范围最接近它的一端截短后再进行存储。还有一个比较特别的地方是,MySQL 会在不合规定的值插入表前自动修改成 0。sql

字符串类型

MySQL 提供了 8 个基本的字符串类型,能够存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据。数据库

一个英文字符 占用一个字节;
汉字:
字符类型若为gbk,每一个字符最多占2个字节;
字符类型若为utf8,每一个字符最多占3个字节。
  • CHAR 和 VARCHAR 类型

CHAR 类型用于定长字符串,而且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格做填补。性能

CHAR 类型的一个变体是 VARCHAR 类型。它是一种可变长度的字符串类型,而且也必须带有一个范围指示器。优化

CHAR 和 VARCHGAR 不一样之处在于 MYSQL 数据库处理这个指示器的方式:CHAR 把这个大小视为值的大小,不长度不足的状况下就用空格补足。而 VARCHAR 类型把它视为最大值而且只使用存储字符串实际须要的长度(增长一个额外字节来存储字符串自己的长度)来存储值。因此短于指示器长度的 VARCHAR 类型不会被空格填补,但长于指示器的值仍然会被截短。编码

由于 VARCHAR 类型能够根据实际内容动态改变存储值的长度,因此在不能肯定字段须要多少字符时使用 VARCHAR类型能够大大地节约磁盘空间、提升存储效率。但若是确切知道字符串长度,好比就在50~55之间,那就用 CHAR 由于 CHAR
类型因为自己定长的特性使其性能要高于 VARCHAR;

时间类型

clipboard.png

int(11)最大长度是多少?

  在SQL语句中int表明你要建立字段的类型,int表明整型,11表明字段的长度
  这个11表明显示宽度,整数列的显示宽度与mysql须要用多少个字符来显示该列数值,与该整数须要的存储空间的大小都没有关系,好比,无论设定了显示宽度是多少个字符,bigint都要占用8个字节。
  int是整型,(11)是指显示字符的长度,但要加参数的,最大为255,好比它是记录行数的id,插入10笔资料,它就显示00000000001 ~~~00000000010,当字符的位数超过11,它也只显示11位,若是你没有加那个让它未满11位就前面加0的参数,它不会在前面加0
  声明整型数据列时,咱们能够为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,若是没有给它指定显示宽度,MySQL会为它指定一个默认值。显示宽度只用于显示,并不能限制取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,而且容许的最大值也不会是999,而是 INT整型所容许的最大值。
在整型数据列后加上UNSIGNED属性能够禁止负数,取值从0开始spa

varchar最大长度是多少?

一. varchar存储规则:
  4.0版本如下,varchar(20),指的是20字节,若是存放UTF8汉字时,只能存6个(每一个汉字3字节)
5.0版本以上,varchar(20),指的是20字符,不管存放的是数字、字母仍是UTF8汉字(每一个汉字3字节),均可以存放20个,最大大小是65532字节
Mysql4中最大也不过是20个字节,可是Mysql5根据编码不一样,存储大小也不一样。 code

在varchar(M)类型的数据列里,每一个值只占用恰好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节).blog

varchar最大长度是多少?
  这不是一个固定的数字。先简要说明一下限制规则。
  一、限制规则
  字段的限制在字段定义的时候有如下规则:
  a) 存储限制
  varchar 字段是将实际内容单独存储在聚簇索引以外,内容开头用1到2个字节表示实际长度(长度超过255时须要2个字节),所以最大长度不能超过65535。
  b) 编码长度限制
  字符类型若为gbk,每一个字符最多占2个字节,最大长度不能超过32766;
  字符类型若为utf8,每一个字符最多占3个字节,最大长度不能超过21845。
  若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
  c) 行长度限制
  致使实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示
  ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。
  二、计算例子
  举两个例说明一下实际长度的计算。
  a) 若一个表只有一个varchar类型,如定义为
  create table t4(c varchar(N)) charset=gbk;
  则此处N的最大值为(65535-1-2)/2= 32766。
  减1的缘由是实际行存储从第二个字节开始’;
  减2的缘由是varchar头部的2个字节表示长度;
  除2的缘由是字符编码是gbk。索引

字段类型总结

1.关于手机号,推荐用char(11),char(11)在查询上更有效率,由于手机号是一个活跃字段参与逻辑会不少。

合理的选择数据类型

  • 选择合理范围内最小的

咱们应该选择最小的数据范围,由于这样能够大大减小磁盘空间及磁盘I/0读写开销,减小内存占用,减小CPU的占用率

  • 选择相对简单的数据类型

数字类型相对字符串类型要简单的多,尤为是在比较运算时,因此咱们应该选择最简单的数据类型。

  • 列属性尽可能为NOT NULL

为何这么说呢,由于MYSQL对NULL字段索引优化不佳,增长更多的计算难度,同时在保存与处理NULL类形时,也会作更多的工做,因此从效率上来讲,不建议用过多的NULL。有些值他确实有可能没有值,怎么办呢?解决方法是数值弄用整数0,字符串用空来定义默认值便可

相关文章
相关标签/搜索