在数据库中varchar与char的区别
char是固定长度类型
varchar是可变的长度类型
char和varchar类型相似,但是它们的存储和检索方式不同。在MySQL5.0.3,它们在最大长度和是否保留尾部空格也不相同。
char和varchar定义了字符串的最大长度。例如,char(30)可以放30个字符。
char列的长度在你建表的时候,就是你定义的固定长度。值的范围是0~255。char值存储的时候,右部以空格来填充到指定的长度。当检索char的时候,会自动去掉尾部的空格。
varchar列是变长的。在MySQL5.0.3之前可以定义的长度是0~255,之后可以定义到0~65535。在MySQL5.0.3及以后的版本中varchar列的有效长度,受行的最大值和使用的字符限制。
对比char,varchar,加上前缀的数据长度是当做一个字节还是两个字节存储。这个前缀的长度表明了值的字节数。如果值不超过255的话,这个列用一个字节的长度,如果这个值可能超过255个字节,那么就使用两个字节的长度。
如果严格的SQL模式没有启用,你分配了一个char或者varchar列超出了列的最大长度,那么这个值就会被截短以填充列,这时候就会产生一个警告。对于截短的非空格字符,你可以设置严格的SQL模式,来产生一个错误。
对于varchar列来说,SQL模式在启用的时候,大量的尾部空格在插入之前都会被截短,产生一个警告。对于char列来说,不管SQL模式是否被启用,都会静默地去掉插入值的过量的尾部空格。
varchar值存储的时候是不会填充的。如何处理尾部空格,取决于版本。在MySQL5.0.3中,当值存储和检索的时候,保留尾部空格,和标准的SQL保持一致。在MySQL5.0.3之前,值被保存到varchar列的时候,尾部空格会被剔除。这样也就意味着检索值的时候,也不存在这些空格。
在MySQL5.0.3之前,如果你需要一个不去掉尾部空格的数据类型的时候,要考虑BLOB或者TEXT类型。同样当你存储加密数据或者压缩数据的时候,也要使用BLOB列,而不是char或者varchar列,来避免需要改变值的时候,尾部空格的潜在问题。
下面的表格来说明char和varchar的存储方式和显示结果的差别。(假设列用的很简单的字符,使用latin1编码)

在数据库中varchar与char的区别的更多相关文章
- MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
varchar与char的区别: 1).varchar与char的区别char是一种固定长度的类型,varchar则是一种可变长度的类型 尽可能的使用 varchar 代替 char ,因为首先变长 ...
- MySQL数据库中varchar与char类型的区别
在数据库中建表时,需要给数据定义一个数据库中的数据库类型,当需要给String类型定义一个数据库中的类型时,可以看见有两个选择,一个是varchar,另一个是char,有很多人不清楚两者的区别,包括自 ...
- mysql 中Varchar 与char的区别
一.字符与字节与编码关系 ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间.一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制.最 ...
- mysql数据库的 varchar 和 char 的区别
char是存储字符(无论字母还是汉字都最多存255个) char(20)表示这个字段最多存20个字符 如果存了16个字符 那么也会占用20个字符的空间 varchar是存储字节(1个字母1个字节 ...
- Mysql中varchar和char区别
一.varchar和char的区别: 区别一:定长和变长 char表示定长.长度固定,varchanr表示变长,即长度可变. 即char类型是规定多少字长则必须存储多少字长,超过的长度的字段则只能截取 ...
- MySQL中varchar与char区别
MySQL中varchar与char区别(转) MySQL中varchar最大长度是多少? 一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字 ...
- mysql中varchar和char区别(思维导图整理)
由于mysql一直是我的弱项(其实各方面我都是很弱的),所以最近在看msyql,正好看到varchar和char区别,所以整理一下,便于以后遗忘. 0.0图片已经说明一切,但是系统说我字数不够,我真能 ...
- MySql中varchar和char,如何选择合适的数据类型?
背景 学过MySQL的同学都知道MySQL中varchar和char是两种最主要的字符串类型,varchar是变长的类型,而char是固定长度.那关于如何选择类型就成为令人头疼的事,很多初学者为了保证 ...
- C++ 中 string和char* 的区别
C++ 中 string和char* 的区别 1.定义: string:string是STL当中的一个容器,对其进行了封装,所以操作起来非常方便. char*:char *是一个指针,可以指向一个字符 ...
随机推荐
- for循环嵌套的优化
public static void main(String[] args) { int x = 0; for (int i = 0; i < 2; i++) { ...
- 关于editor网页编辑器ueditor.config.js 配置图片上传
最近公司项目在做一个门户网站,其中新闻和简介等部分使用到了ueditor编辑器,但是上级明确指示需要图片上传这个功能,这时却发现图片上传功能不能正常使用,上传时一直报错,网上收了好几个处理办法,都说的 ...
- 美国 ZIP Code 一览表
今天给大家提供美国的Zip Code的原因是大家在注册国外的账号时,需要提供这个Zip Code,因为一般美国的服务默认是面向美国的,甚至是仅支持美国. 以下提供一些美国的zip code 列表. 邮 ...
- xcopy中提示“无效的参数数量”的解决方法
原因是DOS下不支持长文件名,只支持8.3格式的文件名 .如果是Windows下的命令行,对于有空格的命令行要加引号.应该是 copy "c:\program files" &qu ...
- html5上传图片
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- asp.net mvc4 过滤器的简单应用:登录验证
直接上代码,不要说话. ASP.NET MVC4过滤器的简单应用:验证登录 [AcceptVerbs(HttpVerbs.Post)] public ActionResult login(FormCo ...
- jsp中jstl标签的类似 if - else 语句 的语法
在jsp中引入jstl的标签库和函数库 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c&q ...
- Docker部署Hadoop集群
Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...
- SQLserver2008数据库备份和还原问题(还原是必须有完整备份)
首先,我要说明的是你必须拥有完整的数据库备份,下面的还原教程,才算有用,如果其它问题,请搜索别的大牛的解决办法,本方法只适合菜鸟. 这个连接是站长大人的异常恢复方法,有问题可以自己学习http://w ...
- c3p0连接池获得的Connection执行close方法后是否真的销毁Connection对象?
问题描述: jfinal做的api系统中,在正常调用接口一段时间后,突然再调用接口的时候,该请求无响应api系统后台也无错误信息 (就是刚开始接口调用是正常的,突然就无响应了) 于是啊,就开始找错误. ...