Mysql复习(二)

Mysql复习(二)

六月 12, 2018

先写一些题外话做铺垫。

1 Bit = 一个二进制数据,也就是位,也就是0或1,对于计算机来说,只认识0和1

1 Byte = 8 Bit,也就是字节

1 英文字母或数字或符号 = 1 Byte

1 中文 = 2或者3 Byte (UTF-8是3个,视编码而定)

字节是网络传输中信息的计量单位,字符是对于人来说看到的,一个字,一个字母,一个符号等等就是一个字符

Mysql字段

字段类型及占用大小具体见链接或者官方文档

char与varchar

char与varchar存储mysql的限制都是字节数,但是在建表的时候我们给的限制是字符长度,这个一定要注意。

  • char

    char在mysql中的存储限制为0~255个_字节_,但是我们在创建表字段的时候设置的是字符长度,而不是字节长度,比如char(10),这里我们设置的是字符的长度,字节长度是大于等于这个长度的。为什么是255,而不是256,因为头部的1个字节是用来表示长度的,char是定长的,如果未占满,后面的都用空格填充,查询的时候去掉多余空格,如果为空也是占用一个字节长度。

  • varchar

    varchar在mysql中的存储限制是65535,1个字节也是存储长度的,但是,255以内的字节只用1个字节就可表示长度,但是如果大于255字节,那么要用2个字节表示长度,也就是限制编程了65534,有时候我们会给varchar加一个不为空限制,这样的话又会多占用1个字节,这时候限制变成了65533,另外需要注意的是如果建表的时候设置varchar(65535),这里的65535是字符数,明显超过了65535的字节限制,mysql会在不超出当前行限制的前提下帮我们自动转为text,同时生成一个warning信息,参见

char效率更高一点,varchar虽然更灵活,只限制于硬盘,因为它是多大就占用多少磁盘空间,但是如果在和java等后台程序交互的时候,也就是到了内存中占用的大小是设置的最大大小,所以定长或者长度幅度很小的字段建议设置char,参见