MYSQL中字符串char与varchar的区别

MYSQL中char和varchar都是字符串类型,但是他们的存储和检索的方式不一样。

char 是定长的字符串,varchar是不定长的字符串。

char类型长度是(0-255)之间,在当某个字段被定义成char类,并指定长度,其长度就不再变化,当 CHAR 值被存储时,他们被用空格在右边填补到指定的长度。当 CHAR 值被检索时,填充的空格被删去。

varchar类型长度是(0-255)之间,与 CHAR 类型相反,VARCHAR 值只存储所需的字符,外加一个字节记录长度,值不被填补,当值被存储时,拖后的空格被删去。

如果你把一个超过列最大长度的值赋给一个 CHAR 或 VARCHAR 列,值被截断以 适合串类型。

例如,我们用下表来说明存储一系列不同的串值到 CHAR(4)和 VARCHAR(4)列的结果:

表 1-7 CHAR 类型和 VARCHAR 类型的对比

CHAR(4)

存储需求

VARCHAR(4)

存储需求

''

'

4字节

''

1字节

'ab'

'ab

4字节

'ab'

3字节

'abcd'

'abcd'

4字节

'abcd'

5字节

'abcdefgh'

'abcd'

4字节

'abcd'

5字节

虽然实际存储的值并不一样,但是查询时,这两种类型是一致的,因为 CHAR(4)类型多于的空格将被忽略。

大多数情况下,同一表中CHAR 和VARCHAR只能使用其中之一,若包含两种类型,则MySQL 会将列从一种类型转换为另一种类型。

其原因如下:

1、       行定长的表比行可变长的表容易处理,效率更高。

2、       只有所有的类型是定长时,行才是定长的,才能提高性能。

3、       有时为了节省存储空间,使用了变长类型,在这种情况下最好也将定长列转换为可变长列。

 


你可能感兴趣的:(数据库相关)