MySql教程

谈谈Mysql数据库中VARCHAR和CHAR类型(InnoDB)

本文主要是介绍谈谈Mysql数据库中VARCHAR和CHAR类型(InnoDB),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

VARCHAR和CHAR类型是两种主要的字符串类型.

今天这篇文章我们主要讨论一下VARCHAR和CHAR类型,这里我们以InnoDB做假设。

首先我们先来谈一谈VARCHAR

众所周知,VARCHAR是可变字符串类型。

什么是可变字符串类型呢?
也就是它仅使用必要的空间,也就是越短的字符串使用越少的空间
例如: VARCHAR(5)和VARCHAR(200) 存储 'hello’的空间开销是一样的。
VARCHAR节省了存储空间,所以对性能也是有帮助的!

这时候小伙伴们可能会想到: 芜湖!VARCHAR这么完美,以后就都用VARCHAR存字符串吧

别着急,您继续瞧。

VARCHAR虽然节省了空间,但是因为行是变长的,在UPDATE时可能使行变得比原来更长,这也就导致需要做额外的工作。
就是说,一个行的占用的空间增长,并且在页内已经没有更多的空间存储了,这种情况下InnoDB则需要分裂页使行可以放进页内。
(这里需要大家了解一下行和页的相关知识)

下边给大家推荐几种使用的情况

  • 字符串的最大长度比平均长度大很多
  • 列的更新很少,所以碎片不是问题

接下来就是CHAR

CHAR类型我们都知道,它是定长的
Mysql会根据定义的字符串长度分配足够的空间

  • 适合用来存储较短的字符串
  • 或者长度比较固定的字符串(比如密码的MD5值)

关于CHAR似乎没有什么好说的内容。。(以后再补充吧)

最后我们来看一下

朋友们心里可能有个大大的问号
既然VARCHAR(5)和VARCHAR(200) 存储 'hello’的空间开销是一样的。
那以后我们直接VARCHAR(255)不就好了吗?
NONONO
一般来说MYSQL通常会分配固定大小的内存快来保存内布值。
尤其是使用内存临时表进行排序或者操作的时候会变得特别糟糕
在利用磁盘临时表进行排序的时候也特别糟糕

所以,各位,最好的策略还是只分配真正需要的空间

这篇关于谈谈Mysql数据库中VARCHAR和CHAR类型(InnoDB)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!