现在的位置: 首页 > 综合 > 正文

MySQL列类型之——CHAR与VARCHAR

2013年02月04日 ⁄ 综合 ⁄ 共 1636字 ⁄ 字号 评论关闭

1.      CAHRVARCHAR

类型

 

范围

字节

备注

[NATIONAL] CHAR(M) [BINARY| ASCII | UNICODE]

固定长度字符串

M表示列长度。M的范围是0255个字符

M个字节

0 <= M <= 255

1.当保存时在右侧填充空格以达到指定的长度.

2.当检索CHAR值时尾部空格被删除。

3.在存储或检索过程中不进行大小写转换。

[NATIONAL] VARCHAR(M) [BINARY]

变长字符串

M 表示最大列长度。M的范围是065,535(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。最大有效长度是65,532字节)。

L+1个字节,其中L <= M 0 <= M <= 65535

1.CHAR对比,VARCHAR值保存时只保存需要的字符数并不进行填充,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)

2.当值保存和检索时尾部的空格仍保留,符合标准SQL

 

如想了解更多VARCHAR字段长度请点击http://www.cnblogs.com/mo-beifeng/archive/2011/08/09/2133039.html

2.      下面的表显示了将各种字符串值保存到CHAR(4)VARCHAR(4)列后的结果,说明了CHARVARCHAR之间的差别:

CHAR(4)

存储需求

VARCHAR(4)

存储需求

''

'    '

4个字节

''

1个字节

'ab'

'ab  '

4个字节

'ab '

3个字节

'abcd'

'abcd'

4个字节

'abcd'

5个字节

'abcdefgh'

'abcd'

4个字节

'abcd'

5个字节

注意:上表中最后一行的值只适用不使用严格模式时;如果MySQL运行在严格模式,超过列长度不的值保存,并且会出现错误。

3.      CHAR(4)VARCHAR(4)列检索的值并不总是相同,因为检索时从CHAR列删除了尾部的空格。通过下面的例子说明该差别:

mysql> CREATE TABLE vc (v VARCHAR(4), c CHAR(4));

Query OK, 0 rows affected (0.02 sec)

 

mysql> INSERT INTO vc VALUES ('ab  ', 'ab  ');

Query OK, 1 row affected (0.00 sec)

 

mysql> SELECT CONCAT(v, '+'), CONCAT(c, '+') FROM vc;

+----------------+----------------+

| CONCAT(v, '+') | CONCAT(c, '+') |

+----------------+----------------+

| ab  +          | ab+            |

+----------------+----------------+

4.      但是MySQL中的所有CHARVARCHAR值比较时不需要考虑任何尾部空格,例如:

mysql> CREATE TABLE names (myname CHAR(10), yourname VARCHAR(10));

Query OK, 0 rows affected (0.09 sec)

 

mysql> INSERT INTO names VALUES ('Monty ', 'Monty ');

Query OK, 1 row affected (0.00 sec)

 

mysql> SELECT myname = 'Monty  ', yourname = 'Monty  ' FROM names;

+--------------------+----------------------+

| myname = 'Monty  ' | yourname = 'Monty  ' |

+--------------------+----------------------+

|                  1 |                    1 |

+--------------------+----------------------+

 

抱歉!评论已关闭.