MYSQL中字符串char与varchar的区别

本文详细解释了MYSQL数据库中CHAR和VARCHAR两种字符串类型的存储方式及其区别。CHAR为定长字符串,VARCHAR为变长字符串。文章还介绍了这两种类型在存储和检索时的不同表现以及在表设计中的使用建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、       有时为了节省存储空间,使用了变长类型,在这种情况下最好也将定长列转换为可变长列。

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值