int(11)与int(8)的区别:

1 括号里面的是 显示宽度。显示宽度只是指明 mysql需要用多少个字符来显示该列数值,数值的位数小于指定的宽度时,左侧用数字 0 填充。

2 如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。

3 在存储方面确实没什么不同,设置长度只有在设置了自动填充 ZEROFILL 的时候才体现出来, 比如 id=1 长度为 int (5) 的话会显示 00001。而一旦人工设置了 ZEROFILL 属性,MySQL 会自动设置 UNSIGNED 属性(即 ZEROFILL 不能存储负数)

char(n)与varchar(n)的区别:

1 与int不同,这里的n并不代表字节,而代表 字符

2 存值时,varchar 只会占用实际字符应该占用的字节空间 L+1;

3 char 会占满声明字符数,无论填充字符长短。

4 超过char和varchar的n设置后,字符串会被截断。

5 char在存储的时候会截断尾部的空格,varchar和text不会。

6 可变长度的字符型数据(varchar),会产生碎片

7 varchar(100)和varchar(200)按理说,在低于100时都是一样的,但其实varchar(200)更占内存。

关于tinyint(1)

在mysql数据库里面一般使用tinyint(1)代表boolean类型
而如果存储enum比如1、2、3、4,把类型设为tinyint(1)。
则在mybatis进行转换,转为map对象时,存的key就会变成boolean类型。

解决办法:

  • jdbcURL的参数后面,添加:&tinyInt1isBit=false
  • 更改字段类型为int
  • 定义为tinyInt(N), N>1 (例如 tinyInt(2))
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐