当前位置:首页 > 开发 > 数据库 > 正文

MySQL 的 char 与 varchar

发表于: 2014-05-27   作者:bylijinnan   来源:转载   浏览:
摘要: 今天发现,create table 时,MySQL 4.1有时会把 char 自动转换成 varchar 测试举例: CREATE TABLE `varcharLessThan4` ( `lastName` varchar(3) ) ; mysql> desc varcharLessThan4; +----------+---------+------+-


今天发现,create table 时,MySQL 4.1有时会把 char 自动转换成 varchar

测试举例:
CREATE TABLE `varcharLessThan4` (
  `lastName` varchar(3)
) ;

mysql> desc varcharLessThan4;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| lastName | char(3) | YES  |     | NULL    |       |
+----------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)


CREATE TABLE `charGreaterThan4` (
  `firstName` char(4),
  `lastName` varchar(4)
) ;

mysql> desc charGreaterThan4;
+-----------+------------+------+-----+---------+-------+
| Field     | Type       | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+-------+
| firstName | varchar(4) | YES  |     | NULL    |       |
| lastName  | varchar(4) | YES  |     | NULL    |       |
+-----------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

CREATE TABLE `charLessThan4` (
  `firstName` char(3),
  `lastName` varchar(4)
) ;

mysql> desc charLessThan4;
+-----------+------------+------+-----+---------+-------+
| Field     | Type       | Null | Key | Default | Extra |
+-----------+------------+------+-----+---------+-------+
| firstName | char(3)    | YES  |     | NULL    |       |
| lastName  | varchar(4) | YES  |     | NULL    |       |
+-----------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


事实上, MySQL 5 之前有这样的规则:
1.如果表中有 varchar 类型的列,那表中其他 char 类型的列:
a.如果 char 的长度大于等于4,那就会转换成 varchar
b.如果 char 的长度小于4,那不会转换
2. varchar 的长度小于4,则会转换成 char
官方文档参考: http://dev.mysql.com/doc/refman/4.1/en/silent-column-changes.html

但到了 MySQL 5.1又不一样了,以上所有测试在 MySQL 5.1中都不会做自动转换

《高性能 MySQL》一书中提到, varchar 要用额外的空间来保存长度

因此我们容易认为,尽量用 char 而不是 varchar

但现实中,很多情况下,表里都会有 varchar 的字段,在这样的表中,其他字段即使你可以定义为 char,也不能提升速度

原文:

Note that using CHAR will only speed up your access if the whole record is fixed size. That is, if you use any variable size object, you might as well make all of them variable size. You gain no speed by using a CHAR in a table that also contains a VARCHAR.

因此,实际中可以统一使用 varchar 而不必考虑过多

MySQL 的 char 与 varchar

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
我们知道CHAR(M)和VARCHAR(M)的区别就是VARCHAR(M)是变长的字符串,而CHAR(M)是定长的字符串。我们
一般初学会认为,二者占用的空间是一样的。比如说我存储5个char,二者都是实际占用了5个char了【勘
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也
最近在设计MySQL数据库表时,用到了char和varchar类型,另外还接触到了text类型。他们的存储方式和
学过数据库理论的读者,都应该还记得关于CHAR和VARCHAR的性能对比:CHAR比VARCHAR更快,因为CHAR是
学过数据库理论的读者,都应该还记得关于CHAR和VARCHAR的性能对比:CHAR比VARCHAR更快,因为CHAR是
转自:http://blog.csdn.net/yah99_wolf/article/details/7038780 学过数据库理论的读者,都应该还
学习就是不断总结的过程,还记得总结char,varchar和nachar区别是看耿建玲视频的时候,但是,敲完机
char、varchar 类型的字段加索引,都得为索引获取设置一个长度。合适的长度可以节省资源,而不是把
每次在设计数据库的时候都会因为数据类型是否合适而发愁,现在小编就帮助大家在这里详细的讲述一下
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号