当前位置: 首页 > 编程日记 > 正文

MySQL中char与varchar的区别

字符与字节的区别

一个字符由于所使用的字符集的不同,会并存储在一个或多个字节中,所以一个字符占用多少个字节取决于所使用的字符集
注意:char与varchar后面接的数据大小为存储的字符数,而不是字节数(其实是5.0版本以上是这样)
字符表示无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节。

char与varchar的差异

为方便说明,我们下面定义一个表:
CREATE TABLE `t_users` (
`name` CHAR(10) NOT NULL,
`subject` VARCHAR(10) NOT NULL,
`description` CHAR(10) NOT NULL
)
INSERT INTO `t_users` (`name`, `subject`, `description`) VALUES ('zejin', 'zejin ', 'zejin ');

存数据时的区别

char定义的是固定长度,长度范围为0-255,存储时,如果字符数没有达到定义的位数,会在后面用空格补全存入数据库中,在上例中,name实际存储在数据中的数据为'zejin '
varchar是变长长度,长度范围为0-65535,存储时,如果字符没有达到定义的位数,也不会在后面补空格,在上例subject字段中,实际存储在数据中的数据为'zejin ',当然还有一或两个字节来描述该字节长度

取数据时的区别

数据库取char的数据时,会把后面的空格全部丢弃掉,譬如上例中的description字段取出来时只剩zejin
mysql> select concat('(',name,')'),concat('(',description,')') from t_users;
+----------------------+-----------------------------+
| concat('(',name,')') | concat('(',description,')') |
+----------------------+-----------------------------+
| (zejin) | (zejin) |
+----------------------+-----------------------------+
1 row in set (0.00 sec)
也就是说,在char中的尾部存入空格时,最后取出来都会被丢弃。
当然指定PAD_CHAR_TO_FULL_LENGTH时,在取数据时让尾部的空格保留。
而数据库在取varchar数据时,尾部空格会保留,譬如subject字段:
mysql> select concat('(',subject,')'),concat('(',description,')') from t_users;
+-------------------------+-----------------------------+
| concat('(',subject,')') | concat('(',description,')') |
+-------------------------+-----------------------------+
| (zejin ) | (zejin) |
+-------------------------+-----------------------------+
1 row in set (0.00 sec)

占用字节差别

以latin编码为便,一个字符占用一个字节。
ValueCHAR(4)Storage RequiredVARCHAR(4)Storage Required
''' '4 bytes''1 byte
'ab''ab '4 bytes'ab'3 bytes
'abcd''abcd'4 bytes'abcd'5 bytes
'abcdefgh''abcd'4 bytes'abcd'5 bytes
可以用上表来表示,当定义char时,不管你存入多少字符,都会占用到你定义的字符数,而用varchar时,则和你输入的字符数有关,会多一到两个字节来记录字节长度,当数据位占用的字节数小于255时,用1个字节来记录长度,数据位占用字节数大于255时,用2个字节来记录长度,还有一位来记录是否为nul值。

注意

mysql每一行的最大字节数为65535,当你使用utf8,一个字符有可能占用三个字节的时候,varchar如果定义允许空的话能定义的最大长度为(65535-1-2)/3=21844.
Mysql在对比char,varchar,text类型的数据时,是不会把尾部的空格考虑在内的,这对所有字符集都适用,但在这里是除了like比较符的,譬如:
mysql> select name='zejin',name='zejin ' from t_users;
+--------------+----------------+
| name='zejin' | name='zejin ' |
+--------------+----------------+
| 1 | 1 |
+--------------+----------------+
1 row in set (0.00 sec)
mysql> select name like 'zejin',name like 'zejin ' from t_users;
+-------------------+---------------------+
| name like 'zejin' | name like 'zejin ' |
+-------------------+---------------------+
| 1 | 0 |
+-------------------+---------------------+
1 row in set (0.00 sec)

相关文章:

怎样在Red Hat Enterprise Linux 5.4版本上安装GCC?

注意:如果打算使用GUI的方式安装,需要导入GPG-Key(否则在使用GUI时会出现public key for *.rpm is not installed) 请切换到安装光盘目录下: cd /media 可以看到 RHEL* 的目录,然后切换到这个目录中: cd RHEL* 你需要运…

【C++】mingw32-make+cmake:error: ‘nullptr‘ was not declared in this scope解决方法

###问题 使用cmake成功(Configuring done Generating done)后,在cmd终端中执行 mingw32-make报错: error: nullptr was not declared in this scope###原因 nullptr是在c11的新内容。编译时,没有添加对C11的支持。 解…

喜得爱女,吴恩达深情撰文:欢迎你来到新世界!

整理 | 琥珀出品 | AI科技大本营(ID:rgznai100)一个月前,吴恩达冷不丁在Twitter放出了重磅消息: “我们的最新‘成果’ Baby Ng 即将诞生!2019 年 2 月见面!”果然,昨日吴恩达公开了首个小公主降…

FastJson 简单使用

对象、List转JsonUser user new User(); /*JSON 序列化,默认序列化出的JSON字符串中键值对是使用双引号,如果需要单引号的JSON字符串, [eg:String jsonString JSON.toJSONString(map, SerializerFeature.UseSingleQuotes);] *fastjson序…

【数据安全案例】交警计算机系统再遭***,交通违法记录随意删除

根据新浪报道,据新华社10月14日电 利用当网管的机会,破解密码,非法进入交警计算机系统为他人删除车辆交通违法记录牟利。辽宁省鞍山市铁西区检察院透露,当地某公司员工程尚军因涉嫌破坏计算机信息系统罪,已于10月初被依…

开源,还能走多远?

【编者按】在各大厂纷纷拥抱开源的当口,“开源代码面临可持续发展危机”的言论也甚嚣尘上。早期,技术爱好者们“用爱发电”,“他们知道在出问题前,没人会注意到他们,没人会重视他们”。但遗憾的是,很长一段…

使用axis开发web service服务端

一、axis环境搭建 1.安装环境 JDK、Tomcat或Resin、eclipse等. 2.到 http://www.apache.org/dyn/closer.cgi/ws/axis/1_4 下载Axis的jar包 3.将Axis的jar包放入WEB-INF/lib目录下 二、编写web service服务端 1.编写服务 package com.webservice;public class HelloWebservice {…

【Qt】qt打印文件名、函数名、行号

#include <QDebug> #define MyDebug qDebug()<<"[FILE:"<<__FILE__<<",LINE"<<__LINE__<<",FUNC"<<__FUNCTION__<<"]

【Qt】Qt项目常用代码总结

路径 获取当前路径 #include <QCoreApplication> QString appDirPath QCoreApplication::applicationDirPath(); 转换成对应系统路径 返回路径名&#xff0c;使分隔符转换为适合底层操作系统的分隔符。 windows下为“\”; linux下为“/” #include <QDir> a…

滴滴裁员补偿丰厚,员工称裁出幸福感?

整理 | 一一出品 | AI科技大本营&#xff08;rgznai100&#xff09;滴滴裁员的“靴子”正在逐步落地。据《财经》报道&#xff0c;滴滴近日已给出裁员的具体赔偿方案&#xff1a;补偿一般为 N1 个月&#xff0c;如果本周能确认&#xff0c;再额外给一个月补偿——这一个月补偿是…

shell编程基础

1. 程序的执行风格 程序编程风格&#xff1a;过去式&#xff1a;以指令为中心&#xff0c;数据服务于指令。对象式&#xff1a;以数据为中心&#xff0c;指令服务于数据。过程式编程有以下特点&#xff1a;1&#xff09; 顺序执行&#xff1a;指程序在执行的过程中&#xff0c;…

【Qt】QImage使用总结

图像格式转换 由 RGB 格式转换成 BGR 格式 QImage::rgbSwapped() 返回一个QImage,其中所有像素的红色和蓝色组件的值被交换,有效地将RGB图像转换为BGR图像。 QImage image(fileName); QImage bgr = image.rgbSwapped();将彩色图转换成 灰度图 使用QImage::convertToForma…

访问量最高超7百万的Stack Overflow问题竟然是...

整理 | Jane出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;Stack Overflow&#xff0c;一个面向开发者的 IT 技术问答网站&#xff0c;很多程序员都会在上面提问&#xff0c;浏览问题&#xff0c;查找技术知识。在 Top Question 页面&#xff0c;我…

CentOS 6.9下配置安装KVM

注意&#xff1a;KVM一切安装和运行都是在root用户下完成的&#xff0c;并且只有root才能支持某些软件。 一、准备工作&#xff1a; 1、查看系统版本、内核版本 ##查看系统版本 # cat /etc/redhat-release CentOS release 6.4 (Final) ##查看内核版本 # uname -a Linux KVM 2.6…

感觉要大病一场了

呵呵&#xff0c;这两天很累&#xff0c;再加上天气的原因&#xff0c;整个人晕乎乎的&#xff0c;其实很累&#xff0c;可就是睡不着&#xff0c; 其实我不知道是身体的累&#xff0c;还是心累了&#xff0c;总之&#xff0c;整个人就是提不起做事的激情来一个人就这样浑浑噩噩…

【视频】使用VLC采集摄像头,以RTSP协议发送流到网络上

VLC官网 http://www.videolan.org/ VLC3.0.1搭建失败 本人使用VLC3.0.1,搭建失败,总报无法打开URL VLC2.1.5搭建成功 VLC2.1.5官网地址及下载地址 www.videolan.org/vlc/releases/2.1.5.html http://get.videolan.org/vlc/2.1.5/win32/vlc-2.1.5-win32.exe 搭建RTSP …

优质中文NLP资源集合,做项目一定用得到!

整理 | Jane出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;今天要给大家在推荐 Github 上一个优质的中文 NLP 工具和资源集合项目——funNLP&#xff0c;已经获得了 5.3k Stars&#xff0c;1k Forks。项目作者 杨洋&#xff0c;一枚水博&互联网…

小程序:js获取验证码时(倒计时模块)

代码例子截图最近在上手开发小程序&#xff0c;发现其实小程序要比vue真的要简单太多了&#xff0c;有一套自己的html(WXML)&#xff0c;css(WXSS)&#xff0c;虽然有些标签不能直接沿用html5的标签来开发&#xff0c;不过内置的标签还是很好记也不多。今天在做公司的项目时&am…

十大经典排序算法动画与解析,看我就够了

作者 | 程序员小吴转载自五分钟学算法&#xff08;ID: CXYxiaowu&#xff09;排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序。内部排序是数据记录在内存中进行排序。而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记…

Crystal Reports 财务日记帐凭证套打设计

Crystal Reports 财务日记帐凭证套打设计 一、首先大家看下财务日记帐凭证的纸张格式&#xff1a; 下面我们来分析下有几点要素&#xff1a;1、每页显示5行记录&#xff0c;2、就是在合计处的中文金额大写了。其他页眉页脚在水晶报表中很容易设计。 二、报表设计&#xff1a;在…

oozie调度中的重试和手工rerun一个workflow

在oozie中有Bundle、Coordinator和Workflow三种类型的job&#xff0c;他们之间可以有以下包含关系。 Bundle > Coordinator > Workflow。 1. 重新运行一个Coordinator job&#xff0c;可以通过如下命令&#xff1a; oozie job -rerun 0000034-180116183039102-oozie-hado…

【Qt】在Qlayout中Qlabel::setScaledContents(true);失效

Qlabel中添加图片,并使图片自适应Qlabel的大小 QPixmap picture;picture.load("./1.jpg");ui->label->setScaledContents(true);//图片自适应label大小ui->label->setPixmap(picture); 在layout中Qlabel::setScaledContents(true);失效 解决办法,set…

JavaScript写XML

引用地址&#xff1a;http://zhidao.baidu.com/question/76344574.html?frala0 load 方法 作 用表示从指定位置加载的文件。 基本语法boolValue &#xff1d; xmlDocument.load(url);说 明url 包含要被加载档案的URL 的字符串。假如文件加载成功&#xff0c;传回值即为t…

在家想远程公司电脑?Python +微信一键连接

作者 | 阿文转载自 CSDN&#xff08;ID:CSDNnews&#xff09;有时候需要远程家里的台式机使用&#xff0c;因为我平时都是用 MAC 多&#xff0c;但是远程唤醒只能针对局域网&#xff0c;比较麻烦&#xff0c;于是我想用微信实现远程唤醒机器。准备工作本程序主要是实现远程管理…

Python 语法相关知识

系统相关的信息模块: import syssys.argv 是一个 list,包含所有的命令行参数. sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的文件对象. sys.stdin.readline() 从标准输入读一行 sys.stdout.write("a") 屏幕输出a sys.exit(exit_code) 退出程序 s…

【Qt】 error: LNK1107: 文件无效或损坏: 无法在 0x310 处读取

编译Qt程序使用动态库时&#xff0c;报错 error: LNK1107: 文件无效或损坏: 无法在 0x310 处读取 原因 链接时&#xff0c;使用的dll&#xff0c;而不是lib。 lib是编译时需要的&#xff0c;dll是运行时需要的。 windows下动态库和静态库 动态库&#xff1a;生成动态库时…

Red5安装与入门 与FMS配置

转自&#xff1a;http://www.rosoo.net/a/Media/Streaming/201010/10343.html red5安装时出现问题解决&#xff1a;http://www.cnblogs.com/phinecos/archive/2007/11/26/973109.htmlred5安装设置&#xff1a; 首先需要安装Red5运行所需的java研发环境jdk,我所有的文件都保存到…

面试必备|带你彻底搞懂Python生成器

2019年人工智能系统学&#xff1a; https://edu.csdn.net/topic/ai30?utm_sourceai100_bw 作者 | Rocky0429 转载自 Python空间&#xff08;ID:Devtogether&#xff09; 写在之前 Python 的高级语言特性一直是我们学习 Python 的一个难点&#xff0c;大部分人并没有做到熟练的…

Kubecon 2017大会Google高级产品经理David Aronchick访谈:机器学习和Kubernetes

\看新闻很累&#xff1f;看技术新闻更累&#xff1f;试试下载InfoQ手机客户端&#xff0c;每天上下班路上听新闻&#xff0c;有趣还有料&#xff01;\\\在德克萨斯州奥斯汀市举办的Kubecon大会已于近日闭幕&#xff0c;会议吸引了超过4000名工程师&#xff0c;Kubernetes成为了…

【Qt】Qt程序查看动态链接库(windows)

windows下使用dumpbin查看Qt程序运行时需要链接的动态库 打开终端 打开Qt自带的MSVC终端 如:Qt 5.10.0 64-bit forDesktop(MSVC 2017) 查看dumpbin命令 dumpbin微软官网说明 https://docs.microsoft.com/zh-cn/cpp/build/reference/dumpbin-options 直接输入命令dumpbin…