2014-03-01 50 views

回答

4

当MySQL(或任何数据库或计算机语言)存储可变长度的字符串,基本上有存储该值的方法有两种:

  • 长度可被编码,接着由字符在字符串中
  • 串的末端可以通过一个特殊的字符进行标记(通常'0'

数据库(几乎?)总是使用长度编码。所以,当你存储'ABC'作为一个可变长度的字符串,在数据库中存储它看起来像:

3 A B C 

当存储'A'

1 A 

这样,MySQL的知道什么时候一个字符串结束,接下来开始。不同类型的不同长度取决于字符串的最大长度。因此,1个字节可以保存0到255之间的值。2个字节可以保存0到65,535之间的值,依此类推。

当你使用正则表达式字符,说char(3),然后'ABC'样子:

A B C 

这占据三个字节/任何(取决于字符编码)。该长度可以从表元数据中获知。

随着char(3),串'A'也占据三个插槽:

A   
---^space here 
--------^space here 

额外的两个是通过空间占用。对于长字符串,这通常是空间的大量浪费,这就是为什么大多数字符串存储为varchar而不是char

+0

谢谢你的回答,但为什么VARCHAR需要一些时间1个字节,有时2个字节,为什么CHAR不需要额外的字节? –

+0

@VarunAgw。 。 。阅读最后一段,了解为什么'varchar'有时使用一个字节,有时使用2个字符。'char'不需要额外的字节,因为长度是已知的:字符串中的字符数存储在数据库中,长度为从表格的格式可知。 –

相关问题