MySQL基础教程:CHAR和VARCHAR类型
最新学讯:近期OCP认证正在报名中,因考试人员较多请尽快报名获取最近考试时间,报名费用请联系在线老师,甲骨文官方认证,报名从速!
我要咨询MySQL基础教程:CHAR和VARCHAR类型,CHAR和VARCHAR类型是类似的,但是在他们被存储和检索的方式不同。 其具体的异同为:
当给定一个CHAR列的值时,其长度将被被修正为在你创建表时所声明的长度。长度可以是1和255之间的任何值。(在MySQL 3.23中,CHAR长度可以是0~255。) 当CHAR值被存储时,他们被用空格在右边填补到指定的长度。当CHAR值被检索时,拖后的空格被删去。
在VARCHAR列中的值是变长字符串。你可以声明一个VARCHAR列是在1和255之间的任何长度,就像对CHAR列。然而,与CHAR类型相反,VARCHAR值只存储所需的字符,外加一个字节记录长度,值不被填补;相反,当值被存储时,拖后的空格被删去。(这个空格删除不同于ANSI SQL规范。)
如果你把一个超过列最大长度的值赋给一个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 会将列从一种类型转换为另一种类型。这样做的原因如下:
行定长的表比行可变长的表容易处理,效率更高。
只有所有的类型是定长时,行才是定长的,才能提高性能。
有时为了节省存储空间,使用了变长类型,在这种情况下最好也将定长列转换为可变长列。
这表示,如果表中有 VARCHAR 列,那么表中不可能同时有 CHAR 列;MySQL 会自动地将它们转换为 VARCHAR 列。
转换的规则:
长度小于4的VARCHAR被改变为CHAR。
如果在一个表中的任何列有可变长度,结果是整个行是变长的。因此, 如果一张表包含任何变长的列(VARCHAR、TEXT或BLOB),所有大于3个字符的CHAR列被改变为VARCHAR列。
例如,我们创建下面一个表:
CREATE TABLE ch_type
(
ch1 char(3),
ch2 varchar(3),
ch3 char(4),
ch4 varchar(4)
)
然后查看表的结构:
DESCRIBE ch_type
在MySQL3.23上结果为:
+-------+---------------+
| Field | Type |
+-------+---------------+
| ch1 | char(3) |
| ch2 | char(3) |
| ch3 | varchar(4) |
| ch4 | varchar(4) |
+-------+---------------+