0

0

MySQL数据库中CHAR与VARCHAR区别介绍

php中文网

php中文网

发布时间:2016-06-07 17:52:10

|

2027人浏览过

|

来源于php中文网

原创

本文章详细介绍了关于MySQL数据库中CHAR与VARCHAR区别介绍,有需要了解的朋友可参考本文章。

mysql数据库系统中,char和varchar是非常常见的,它们两个也非常的相似,都是用来保存相对较短的字符串,如保存文章标题、留言、email、用户名等。

二者的主要区别在于存储方式:
char列长度是创建表时声明的长度而且固定不变,长度被限制在0到255之间。而varchar列中的值是可变长度字符串,长度也为0-255,在5.0.3之后长度延长到65535。

在查询显示数据的时候,char会删除字符串尾部的空格(仅仅是尾部),而varchar则完全保留这些空格。这样我们在显示char类型字符串时就没有必要trim掉尾部的空格了。

char适合与保存短字符内容,比如说是   "YS ", "AD ", "OK ", "NO ", "DL ",之类的标志控制符
用于检索方面的,但是前提是,必须是定长的字符才能够保证效率,
vchar适合保存容量较大的内容。不适合保存标志类信息,他的优势是节省存储空间。
为了提高效率吧vchar转传撑char没有什么意义

在MySQL中用来判断是否需要进行对据列类型转换的规则

  1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.
  2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
  3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.
例外:长度小于4个字符的char数据列不会被转换为varchar类型

性能测试

科海网络企业网站管理系统2011.5.17
科海网络企业网站管理系统2011.5.17

科海网络企业网站管理系统支持ASP+ACCESS数据库的虚拟主机即可,上传至服务器上,请把lxlweb文件夹放在网站根目录。 前台功能介绍:企业网站通用七大栏目 网站首页:综合性的显示网站相关信息;公司简介:显示与公司相关内容:公司简介、企业文化、发展策略、人才政策、联系方式等,栏目可以后台无限添加;新闻中心:按新闻类别显示新闻信息、新闻搜索功能,新闻分类后台可无限添加;产品展示:按产品分类显示

下载


VARCHAR平均长度200,CHAR长度250,其它配置如下:
配置项
 配置
 
记录数
 1000万,2000万,5000万,1亿
 
存储引擎
 Innodb
 
行格式
 compact

测试过程中使用的表结构

 代码如下 复制代码

CREATE TABLE `mysqlchar` (
`username` char(32) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `mysqlchar` (
`username` varchar(32) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `mysqlchar` (
`username` char(32) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `mysqlchar` (
`username` varchar(32) default NULL
) ENGINE= InnoDB DEFAULT CHARSET

 代码如下 复制代码
function getRandom($length){
 $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_1234567890';
 $result = '';
 for($i=$length;$i>0;$i--){
  $result .= $str{mt_rand(0,62)};
 }
 return $result;
}
function insert(){
 $dsn = 'mysql:dbname=test;host=127.0.0.1';
 $user = 'root';
 $password = 'xxxxx';
        $dbh = new PDO($dsn, $user, $password);
 $sth = $dbh->prepare('INSERT INTO mysqlchar(`username`)
  VALUES(?)');
 echo microtime();
 echo '    ';
 for($i=0;$i   $sth->execute(array(getRandom(mt_rand(6,32))));
 }
 echo microtime();
}
function select(){
 $dsn = 'mysql:dbname=test;host=127.0.0.1';
 $user = 'root';
 $password = 'xxxxxx';
        $dbh = new PDO($dsn, $user, $password);
 $sth = $dbh->prepare('SELECT username from mysqlchar
  WHERE username = ?');
 echo microtime();
 echo '    ';
 $sth->execute(array('BOklEnL2onF'));
 echo microtime();
}
function addKey(){
 $dsn = 'mysql:dbname=test;host=127.0.0.1';
 $user = 'root';
 $password = 'xxxxx';
        $dbh = new PDO($dsn, $user, $password);
 echo microtime();
 echo '    ';
 $dbh->query('ALTER TABLE mysqlchar ADD KEY test(`username`)');
 echo microtime();
}
//insert();
//select();
//addKey();
?>


测试结果(单位:秒)

MyISAM InnoDB
选项 CHAR(32) VARCHAR(32) 选项 CHAR(32) VARCHAR(32)
1、插入200W数据时间(PHP命令行下执行) 443.34701 422.386431 1、插入1W数据时间(PHP命令行下执行) 227.850326 215.932341
2、插入20条数据(三次平均) 0.004720 0.004445 2、插入20条数据(三次平均) 0.381118 0.405421
3、查询1条数据(三次平均) 0.858885 0.827146 3、查询1条数据(三次平均) 0.017053 0.011800
4、建立索引 30.322559 24.306851 4、建立索引 0.502228 0.455406
6、插入20条数据(三次平均) 0.006587 0.006420 6、插入20条数据(三次平均) 0.359265 0.418550
7、查询1条数据(三次平均) 0.005637 0.002780 7、查询1条数据(三次平均) 0.000867 0.000679
结果说明 在MyISAM引擎下,VARCHAR(32)在各方面的性能都比CHAR(32)较好。
在InnoDB引擎下,除了插入数据VARCHAR(32)的性能略输CHAR(32)外,在查询方面的性能均比CHAR(32)好。

相关专题

更多
javascript void运算符
javascript void运算符

void是一元运算符,执行右侧表达式但始终返回undefined;用于丢弃返回值、阻止a标签跳转、IIFE忽略结果、动态导入不取Promise、安全获取undefined。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

vscode的界面字体大小调整
vscode的界面字体大小调整

调整VSCode界面字体大小可通过设置编辑器或整体UI缩放实现;2.修改"Editor:FontSize"改变代码字体;3.设置"Window:ZoomLevel"调整整体界面字体;4.使用Ctrl+滚轮快捷键临时缩放。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

VSCode的注释快捷键
VSCode的注释快捷键

单行注释快捷键为Ctrl+/(Windows/Linux)或Cmd+/(macOS),块注释使用Shift+Alt+A(Windows/Linux)或Shift+Option+A(macOS),VSCode会根据语言类型自动匹配语法,如JavaScript用//,Python用#,C++用//,若快捷键无效需检查语言扩展或插件冲突。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.29

Golang 命令行工具(CLI)开发实战
Golang 命令行工具(CLI)开发实战

本专题系统讲解 Golang 在命令行工具(CLI)开发中的实战应用,内容涵盖参数解析、子命令设计、配置文件读取、日志输出、错误处理、跨平台编译以及常用CLI库(如 Cobra、Viper)的使用方法。通过完整案例,帮助学习者掌握 使用 Go 构建专业级命令行工具与开发辅助程序的能力。

4

2025.12.29

ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

165

2025.12.26

压缩文件加密教程汇总
压缩文件加密教程汇总

本专题整合了压缩文件加密教程,阅读专题下面的文章了解更多详细教程。

56

2025.12.26

wifi无ip分配
wifi无ip分配

本专题整合了wifi无ip分配相关教程,阅读专题下面的文章了解更多详细教程。

108

2025.12.26

漫蛙漫画入口网址
漫蛙漫画入口网址

本专题整合了漫蛙入口网址大全,阅读下面的文章领取更多入口。

356

2025.12.26

b站看视频入口合集
b站看视频入口合集

本专题整合了b站哔哩哔哩相关入口合集,阅读下面的文章查看更多入口。

703

2025.12.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.5万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 776人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号