码迷,mamicode.com
首页 > 数据库 > 详细

Mysql常用数据类型

时间:2020-12-15 12:10:59      阅读:3      评论:0      收藏:0      [点我收藏+]

标签:不同的   标记   不能   并且   code   需求   系统   方式   使用   

VARCHAR与CHAR字符型数据的差异

  • char(n)varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m3个字节,m?3<=255,m?3<=65535。使用 utf8mb4的话插入m个中文,会占用m4个字节。m?4<=255,m?4<=65535。-
  • 同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的字节空间L+1(L=0到255)或L+2(L>255),并且实际字节空间L+1<=255,或者L+2<=65535.
  • 超过char和varchar的n设置后,字符串会被截断。
  • char的上限为255字节,varchar的上限65535字节,text的上限为65535字节。(65535是在5.7版本才调整的,以前旧版本很小)
    • CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。
  • char在存储的时候会截断尾部的空格,varchar和text不会。
    • char在存储的时候会将右侧空格进行剔除,保留左侧空格。
    • varchar在存储的时候保留所有空格,不进行任何删除
    • varchar和char在查询的时候都只会根据where条件中的左侧空格进行判断,右侧末尾的空格会忽略
  • varchar(M),M范围是0~65535.M的值以最大行大小(65535字节)为准.例如,如果使用UTF-8编码,一个字符占3个字节,那么M最大为21844.

VARCHAR与CHAR 使用建议

  • 根据字符的长度来判断,是考虑其长度的是否相近来确定选择char还是varchar,如何字段的长度基本都是一样或者其长度总是近似的可以选用char

  • 即使使用Varchar数据类型,也不能够太过于慷慨!
    比如你只使用到90个字符,VARCHAR(100)与VARCHAR(200)真的相同吗?结果是否定的。虽然他们用来存储90个字符的数据,其存储空间相同。但是对于内存的消耗是不同的。

  • VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。

    • 这个长度只是“系统长度”,这并不意味着你真的可以完全利用65536字节来存储数据,因为varchar是不定长的,所以需要前两个字节标记字段的实际长度,结尾还要用一个字节表示结束.
  • VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。

  • VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。

  • varchar存储变长数据,但存储效率没有CHAR高。

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

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

  • 效率来说基本是char>varchar>text,但是如果使用的是Innodb引擎的话,推荐使用varchar代替char

TEXT、BlOB类型的区别

  • BLOB和TEXT类型需要1,2,3或4个字节来记录列值的长度,这取决于类型的最大可能长度。VARCHAR需要定义大小,有65535字节的最大限制;TEXT则不需要。如果你把一个超过列类型最大长度的值赋给一个BLOB或TEXT列,值被截断以适合它。

  • 一个BLOB是一个能保存可变数量的数据的二进制的大对象。4个BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB仅仅在他们能保存值的最大长度方面有所不同。

  • BLOB 可以储存图片,TEXT不行,TEXT只能储存纯文本文件。4个TEXT类型TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT对应于4个BLOB类型,并且有同样的最大长度和存储需求。在BLOB和TEXT类型之间的唯一差别是对BLOB值的排序和比较以大小写敏感方式执行,而对TEXT值是大小写不敏感的。换句话说,一个TEXT是一个大小写不敏感的BLOB。

int,bigint,smallint,tinyint类型的区别

  • int(n) 这个n代表的是数字显示的宽度,不代表实际存储空间大小,实际存储空间大小是固定的,它在数据库里面存储的都是4个字节的长度,也就是 32 位.

    • int(3)、int(4)、int(8),int(11) 在磁盘上都是占用 4 btyes 的存储空间
    • 对于无符号整形 (UNSIGNED ),可以存储 2^32 =4,294,967,296大小的数据,宽度为10,即int(10)
    • 对于有符号整型,范围是 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) ,注意看最小值,宽度为11,即int(11)
  • tinyint

    • 从 0 到 255 的整型数据。存储大小为 1 字节
  • smallint

    • 从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。
  • 在 MySQL 8.0 及以上的版本, AUTO_INCREMENT 列会自动添加一个隐式的 UNSIGNED 属性来保证插入的值非负。

Mysql常用数据类型

标签:不同的   标记   不能   并且   code   需求   系统   方式   使用   

原文地址:https://www.cnblogs.com/lyalong/p/14109087.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!