博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
char和varchar的区别
阅读量:6872 次
发布时间:2019-06-26

本文共 1361 字,大约阅读时间需要 4 分钟。

char是一种固定长度的类型,表示字符,它存贮的每个值都占固定个字节
在java内存中,编码为UTF-16,占两个字节(不管英文字母还是中文汉字)
在其它外部环境(所有我们能看见的环境), 编码为UTF-8时,一个字母占一个字节,一个汉字占3个字节;编码为GBK时,一个字母占一个字节,一个汉字占2个字节。
在 MySql中,这个数字表示的是存储多少个字符的意思,这条数据占多少字节还要看哪种编码。 存储的字符串长度不足指定长度时,则会空格补齐(一个空格就是一个字符)。
例如:char(10) --假设utf-8编码 ,每条数据最多可以存放10个字符,如果存放的是字母,则这条数据占用10个字节,不管里面有没有写入10个字符,不足的会空格补齐(在检索操作中那些填补出来的空格字符将被去掉);如果存放的是汉字,则这条数据占用30个字节。
 
varchar:是可变长度的类型(mysql5.0.3之前varchar的长度范围为0-255,mysql5.0.3之后varchar的长度范围为0-65535个字节),
MySql中的每条数据只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节,长度超过255时需要2个字节).
例如:varchar(10)--假设utf-8编码,每条数据最多存放10个字符,如果存入5个英文5个汉字,则占用字节数是:5+5*3+1=21
 
请问自动空格补齐,是怎么补齐的呢?对于char(5)--utf-8编码,假如存入4个字母,它所占字节是多少呢?还需要自动空格补齐吗?假如存入4个汉字呢?
 
 
总的来说,
String str = "abc中国"
字符串str有5个字符,在utf-8编码下,有3+2*3=8个字节;在gbk编码下,有3+2*2=7个字节,
存放在mysql数据库中如果是char(10)类型(10表示最多存放字符数),utf-8编码,所占字节是根据存储英文/中文变化的。不足10个字节的会自动空格补齐。
如果是varchar(10)类型(10仍表示最多存放的字符数),uft-8编码,所占字节是3+2*3+1=9个字节,最后一个是记录数据长度(超过255时,占两个字节)
 
主要有两点不同:1、char固定长度,字符串长度不足时会用字符空格补齐;varchar是可变长度,实际长度+1~2个字节的标记
        2、char查询比varchar更快,即空间换时间
 
 
char一定是两个字节吗?不是的,这个跟我们选用的字符编码有关,如果采用”ISO-8859-1”编码,那么一个char只会有一个字节。如果采用”UTF-8”或者“GB2312”、“GBK”等编码格式呢?这几种编码格式采用的是动态长度的,如果是英文字符,大家都是一个字节。如果是中文,”UTF-8”是三个字节,而”GBK”和”GB2312”是两个字节。而对于”unicode”而言,无论如何都是两个字节。
然后再回答第二个问题,对于一个char如果用”ISO-8859-1”来存储的话,肯定无法存储一个中文,而对于”UTF-8”、“GB2312”、“GBK”而言大多数中文字符是可以存储的。

转载于:https://www.cnblogs.com/wzk-0000/p/9876636.html

你可能感兴趣的文章
以黑客教主之名,TK 发现 Windows 史上最大漏洞
查看>>
《IPv6精髓(第2版)》——导读
查看>>
《Windows Server 2012 Hyper-V虚拟化管理实践》一1.2 Hyper-V安装前后的变化
查看>>
Proxmox VE 4.4 发布,新 Ceph 仪表盘上线
查看>>
《CCNP TSHOOT(642-832)学习指南》一1.2 维护进程及维护流程
查看>>
华为宣布开源流处理平台查询语言 StreamCQL
查看>>
2016 年 6 月 RedMonk 编程语言排行榜
查看>>
《Adobe Photoshop CC经典教程(彩色版)》—第1课1.4节在Photoshop中还原操作
查看>>
HttpClient使用详解
查看>>
增强现实?先不要指望那些眼镜了
查看>>
《iOS 6核心开发手册(第4版)》——1.10节秘诀:使用多触摸交互
查看>>
《云数据管理:挑战与机遇》一第1章
查看>>
《嵌入式C编程实战》——1.5 软件开发工具
查看>>
分析3000份技术面试数据:这几大指标比你毕业于哪所学校更要紧
查看>>
Linux有问必答:如何检查PDF中使用了哪种字体
查看>>
《Lua游戏AI开发指南》一2.1 新建一个沙箱项目
查看>>
对jquery val 获取input 文本框值进行扩展
查看>>
MySQL (select_paren) union_order_or_limit 行为
查看>>
并发不是并行,它更好!
查看>>
nltk 自己训练模型例子
查看>>