当前位置: Oracle DBA培训网-优技培训 >> MySQL培训 > MySQL培训教程 >

MySQL入门课程:CHAR和VARCHAR类型

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)  |
+-------+---------------+

技术沙龙MORE+

标签错误:<!-- #Label# labelId=20160707140604 moduleId=1 classId=12231768634 orderby=2 fields=url,title,u_info attribute= datatypeId=22192428132 recordCount=3 pageSize= <htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate> -->
我要参加技术沙龙