加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL数据库中CHAR与VARCHAR差异介绍

发布时间:2022-06-15 14:40:01 所属栏目:MySql教程 来源:互联网
导读:在mysql数据库系统中,char和varchar是非常常见的,它们两个也非常的相似,都是用来保存相对较短的字符串,如保存文章标题、留言、email、用户名等. 二者的主要区别在于存储方式: char列长度是创建表时声明的长度而且固定不变,长度被限制在0到255之间。而varcha
  在mysql数据库系统中,char和varchar是非常常见的,它们两个也非常的相似,都是用来保存相对较短的字符串,如保存文章标题、留言、email、用户名等.
 
  二者的主要区别在于存储方式:
 
  char列长度是创建表时声明的长度而且固定不变,长度被限制在0到255之间。而varchar列中的值是可变长度字符串,长度也为0-255,在5.0.3之后长度延长到65535。
 
  在查询显示数据的时候,char会删除字符串尾部的空格(仅仅是尾部),而varchar则完全保留这些空格。这样我们在显示char类型字符串时就没有必要trim掉尾部的空格了。
 
  在MySQL中用来判断是否需要进行对据列类型转换的规则:
 
  1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.
 
  2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.
 
  3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.
 
  例外:长度小于4个字符的char数据列不会被转换为varchar类型
 
  性能测试:VARCHAR平均长度200,CHAR长度250,其它配置如下:
 
   `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
  实例代码如下:
 
  <?php
  function getRandom($length){
   $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_1234567890';
   $result = '';
   for($i=$length;$i>0;$i--){
    $result .= $str{mt_rand(0,62)};
   }
   return $result;
  }
    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();  //phpfensi.com
   echo '    ';
   $dbh->query('ALTER TABLE mysqlchar ADD KEY test(`username`)');
   echo microtime();
  }
  //insert();
  //select();
  //addKey();
  ?>  

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读