MySQL 选择合适的数据类型

  -- 在sql server中varchar(10) 10代表字节数,而不是字符数, 一个汉字二个字节所以最多放五个汉字
  INSERT INTO table_1 values('你好中国人民')

浮点数和定点数

  1. 浮点数一般用于表示含有小数点的数值。当一个字段被定义为浮点类型后,如果插入数据的精度超过该列定义的实际精度,则插入值会被四舍五入到实际定义的精度值
  2. 定点数是以字符串形式存放的,所以定点数可以更精确的保存数据
  3. 浮点数会产生误差,避免与浮点数的比较

图片 1

日期类型选择

  1. 根据实际需要选择能够满足应用的最小存储的日期类型
  2. 如果要记录年月日时分秒,并且记录的年份比较久远,那么最好使用 datetime,而不要使用 timestamp。因为 timestamp 表示的日期范围比 datetime 要短的多
  3. 如果记录的日期需要让不同时区的用户使用,那么最好使用 timestamp,因为日期类型中只有它能够和实际的时区相对应

  二者通常用来保存较大文本,如文章或日记, 主要差别是BloB能用来保存二进制数据如照片,text只能保存字符数据。
  这里介绍blob与text存在的一些常见问题:

char 与 varchar

  1. char 属于固定长度的字符类型,而 varchar 属于可变长度的字符类型

  2. 检索时 char 会删除尾部的空格

  3. 不同存储引擎使用建议

    MyISAM:char

    MEMORY:char

    InnoDB:varchar

  --  在mysql中varchar(10) 10代表字符数,而不是字节数,一个汉字是1个字符所以最多可放10个汉字
  INSERT INTO Myisam_char VALUES('你好中国人民','你好中国人民')

text 与 blob

  1. 二者的主要差别是 blob 能用来保存二进制数据,而 text 只能保存字符数据

  2. blob 和 text 值会引起一些性能问题,特别是在执行了大量的删除操作时

    删除操作会在数据表中留下很大的空洞,以后填入这些空洞的记录在插入的性能上会有影响。微了提高性能,建议定期使用 optimize table 功能对这类表进行碎片整理,避免因为空洞导致性能问题

  3. 可以使用合成的(Synthetic)索引来提高大文本字段的查询性能

    合成索引就是根据大文本字段的内容建立一个散列值,并把这个值存储在单独的数据列中,接下来就可以通过检索散列值找到数据行了。但是,要注意这种技术只能用于精确匹配的查询。可以使用 md5()sha1(),或 crc32() 函数生成散列值

  4. 在不必要的时候避免检索大型的 blob 或 text 值

  5. 把 blob 或 text 分离到单独的表中

图片 2

  char长度可选范围在0-255之间,也就是char最大能存储255个字符,varchar的长度范围为0-65535个字节。

--  再次获取表的空间大小, 是134.65MB 发现表的数据大大缩小了,"空洞"被回收了 

二.  text与blob 

  1. "空洞"性能问题

在mysql中,不同的存储引擎对char和varchar的使用原则有所不同,这里简单概括下:
  myisam  存储引擎:建议使用固定长度的数据列代替可变长度的数据列。
  memory  存储引擎:目前都使用固定长度的数据行存储,因此无论使用char或varchar列都没有关系,两者都是作为char类型处理。
  innodb    存储引擎:建议使用varchar类型,在innodb内部行存储格式没有区分固定长度和可变长度。

图片 3

本文由金沙官网线上发布于数据库,转载请注明出处:MySQL 选择合适的数据类型

您可能还会对下面的文章感兴趣: