mysql 中Varchar 与char的区别

一、字符与字节与编码关系

ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。

二、Varchar与char区别

char固定长度的类型:char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉).
varchar可变长度的类型:在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)

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

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

在mysql中,char和varchar都表示字符串类型.但他们存储和检索数据的方式并不相同.

在表结构定义中声明char和varchar类型时,必须指定字符串的长度.也就是该列所能存储多少个字符(不是字节,是字符).例如:char(10)和varchar(10)都能存储10个字符.

声明为char的列长度是固定的,char的长度可选范围在0-255之间.也就是char最大能存储255个字符.如果该列是utf8编码,则该列所占用的字节数=字符数3.如果是gbk编码则该列所占用的字节数=字符数2.

声明为varchar的列长度是可变的,mysql5.7.2 varchar的长度范围为0-65535个字节.采用varchar类型存储数据需要1-2个字节(长度超过255时需要2个字节)来存储字符串的实际长度.如果该列的编码为gbk,每个字符最多占用2个字节,最大长度不能超过32766个字符.如果该列的编码为utf8,每个字符最多占3个字节,最大字符长度为21845.

总结:

  1. char和varchar最大的不同就是一个是固定长度,一个是可变长度.由于是可变长度,因此存储的是实际字符串再加上一个记录字符串长度的字节。如果分配给char或varchar列的值超过 列的最大长度,则对值进行裁剪.
  2. varchar(M)和char(M),M都表示字符数.varchar的最大长度为65535个字节(字符长度为utf8下21845),不同的编码所对应的最大可存储的字符数不同.char最多可以存放255个字符,不同的编码最大可用字节数不同.

三、utf8和gbk编码下的计算方式实例

GBK下: 若一个表只有一个varchar类型,如定义为

  create table t4(c varchar(N)) charset=gbk;

  则此处N的最大值为(65535-1-2)/2= 32766。

  减1的原因是实际行存储从第二个字节开始’;

  减2的原因是varchar头部的2个字节表示长度;

  除2的原因是字符编码是gbk。

UTF8下:
  create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;

  则此处N的最大值为 (65535-1-2-4-30*3)/3=21812

  减1和减2与上例相同;

  减4的原因是int类型的c占4个字节;

  减30*3的原因是char(30)占用90个字节,编码是utf8。

原文地址:https://www.cnblogs.com/shiqi17/p/9442092.html

时间: 2024-11-15 11:55:01

mysql 中Varchar 与char的区别的相关文章

MySQL中varchar和char的区别

下面的特点都根据编号相对应: char的特点: char表示定长字符串,长度是固定的: 如果插入数据的长度小于char的固定长度时,则用空格填充: 因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法: 对于char来说,最多能存放的字符个数为255,和编码无关 varchar的特点 varchar表示可变长字符串,长度是可变的: 插入的数据是多长,就按照多长来存储: varchar在存取方面与char相反,它存取慢,因

MySQL中varchar与char区别

MySQL中varchar与char区别(转) MySQL中varchar最大长度是多少? 一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 5.0版本以上,varchar(20),指的是20字符,无论存放的是数字.字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节 Mysql4中最大也不过是20个字节,但是Mysql5根据编码不同,存储大小也不同. 二. varchar和

Mysql中varchar和char区别

一.varchar和char的区别: 区别一:定长和变长 char表示定长.长度固定,varchanr表示变长,即长度可变. 即char类型是规定多少字长则必须存储多少字长,超过的长度的字段则只能截取出对应的长度进行存储,相对于要求字长长度不够的字段则用空格补齐. 而varchar类型则是只要在规定字长之内,有多少存多少,无需补齐:超出的部分和char一样,舍去即可.(由perfix来实现) 区别二:存储容量不同 对于char类型来说,最多只能存放的字符个数为255,和编码无关. varchar

mysql中varchar和char区别(思维导图整理)

由于mysql一直是我的弱项(其实各方面我都是很弱的),所以最近在看msyql,正好看到varchar和char区别,所以整理一下,便于以后遗忘. 0.0图片已经说明一切,但是系统说我字数不够,我真能在说两句,首先,非常感谢(http://www.jcodecraeer.com/a/shujuku/2012/1014/435.html)让我了解varchar和char的区别,然后,我身为一名程序员,不怎么会用思维导图,不足之处请见谅.

mysql中varchar、char、text的使用

超出char或者varchar设置长度后,字符串会被截断. char和varchar的区别在于:char不管实际的value值是多少,都会占用n个字符空间,而varchar只会占用实际字符占用的空间+1,并且实际空间+1<=n: 下图可以非常明显的看到结果: Value CHAR(4) Storage Required VARCHAR(4) Storage Required '' '    ' 4 bytes '' 1 byte 'ab' 'ab  ' 4 bytes 'ab' 3 bytes

MySql中varchar(10)和varchar(100)的区别==&gt;&gt;以及char的利弊

一般初学会认为,二者占用的空间是一样的.比如说我存储5个char,二者都是实际占用了5个char了[勘误:varchar在实际存储的时候会多一个byte用来存放长度].但是深入一下,设计数据库的时候,二者一样吗?答案是否定的[至少varchar类型需要在数据之前利用一个或者两个字节来存储数据的长度][二者在内存中的操作方式也是不同的,下面的例子中有体现].看下面的例子.如现在用户需要存储一个地址信息.根据评估,只要使用100个字符就可以了.但是有些数据库管理员会认为,反正Varchar数据类型是

int(11)最大长度是多少,MySQL中varchar最大长度是多少(转)

int(11)最大长度是多少,MySQL中varchar最大长度是多少? int(11)最大长度是多少? 在SQL语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度. 这个11代表显示宽度,整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,比如,不管设定了显示宽度是多少个字符,bigint都要占用8个字节. int是整型,(11)是指显示字符的长度,但要加参数的,最大为255,比如它是记录行数的id,插入10笔资料,它就显示0

Java学习篇之---Mysql中varchar类型总结

Mysql中varchar类型总结 今天新做一个项目,需要自己进行数据库设计,发现自己对varchar的用法还不是很熟悉,所以查阅资料总结若下: 1.varchar类型的变化 MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定).在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字 节,也就是说,在4.1或以

用count(*)还是count(列名) || Mysql中的count()与sum()区别

Mysql中的count()与sum()区别 首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `subject` varchar(20) default NULL, `score` tinyint(4) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 插入一些数据, insert into result values ('张三','数学',90), ('张三