MySQL入门课程:CHAR和VARCHAR类型
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) |
+-------+---------------+
Oracle技术沙龙:【数据保护顶尖技术-MAA】首次全国首播12c MAA技术 云数据库加上MAA技术组成最豪华的技...
Oracle技术沙龙第49期:【Oracle 数据库云技术分享】Oracle技术沙龙第49期:【Oracle 数据库云技术分享】本次技术沙...
Oracle技术沙龙第48期:【Oracle 12c RAC安装】小编:今天讲什么内容呢?以后有什么用呢? 大师:今天讲的是12c...
- 我要参加技术沙龙