mysql 字符串类型 char varchar

 

 

 字符类型用在存储名字、邮箱地址、家庭住址等描述性数据

 

char指的是定长字符,varchar指的是变长字符

#官网:https://dev.mysql.com/doc/refman/5.7/en/char.html
#注意:char和varchar括号内的参数指的都是字符的长度#char类型:定长,简单粗暴,浪费空间,存取速度快字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)存储:存储char类型的值时,会往右填充空格来满足长度例如:指定长度为10,存>10个字符则报错,存<10个字符则用空格填充直到凑够10个字符存储检索:在检索或者说查询时,查出的结果会自动删除尾部的空格,除非我们打开pad_char_to_full_length SQL模式(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';)

#varchar类型:变长,精准,节省空间,存取速度慢字符长度范围:
0-65535(如果大于21845会提示用其他类型 。mysql行最大限制为65535字节,字符编码为utf-8:https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)存储:varchar类型存储数据的真实内容,不会用空格填充,如果'ab ',尾部的空格也会被存起来强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysql对row的最大字节限制,即已经足够使用)如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255)如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535)检索:尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容

 

 

 

 

创建两张表

只有整型类型的宽度是显示宽度,其他类型的宽度都是存储宽度

 宽度指的是字符的个数

mysql> create table t13(name char(5));
Query OK, 0 rows affected (0.02 sec)mysql> create table t14(name varchar(5));
Query OK, 0 rows affected (0.01 sec)

 

char就是定长,不够5个字符,会补全到5个字符,补全相应的空格,由空格作为占位符,凑够5个空格。

varchar就是变长,传几个字符,就存几个。

插入数据

mysql> insert into t13 values('李刚 '); #'李刚        '
Query OK, 1 row affected (0.00 sec)mysql> insert into t14 values('李刚 '); #'李刚 '
Query OK, 1 row affected (0.00 sec)

 

查询表,看不到效果

mysql> select name from t13; #
+--------+
| name   |
+--------+
| 李刚   |
+--------+
1 row in set (0.00 sec)mysql> select name from t14; #
+---------+
| name    |
+---------+
| 李刚    |
+---------+
1 row in set (0.00 sec

 

 mysql函数

length:查看字节数
char_length:查看字符数

 

 

char类型 存的是5个 查的是2个

mysql 在存char类型时候 ,会自动补全空格存进来, 取的时候把默认的空格去掉

mysql> select char_length(name) from t13; # 
+-------------------+
| char_length(name) |
+-------------------+
|                 2 |
+-------------------+
1 row in set (0.00 sec)

 

 

varchar 存的是5个 查的是3个

mysql> select char_length(name) from t14; #
+-------------------+
| char_length(name) |
+-------------------+
|                 3 |
+-------------------+
1 row in set (0.00 sec)

 

char填充空格来满足固定长度,但是在查询时却会很不要脸地删除尾部的空格(装作自己好像没有浪费过空间一样),然后修改sql_mode让其现出原形

 

#略施小计,让char现出原形,设置sql模式,
mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';

 

出现原形

mysql> select char_length(name) from t13;
+-------------------+
| char_length(name) |
+-------------------+
|                 5 |
+-------------------+
1 row in set (0.00 sec)

 

对于char 和varchar来说 不管怎么存 取得时候mysql只会对值进行比较 不会管末尾的空格,末尾空格没有意义

只是末尾空格
验证
mysql> select name from t13 where name='李刚        ';
+-----------+
| name      |
+-----------+
| 李刚      |
+-----------+
1 row in set (0.00 sec)mysql> select name from t13 where name='李刚';
+-----------+
| name      |
+-----------+
| 李刚      |
+-----------+
 

 

开头 、中间有空格 都查询不到
mysql> select name from t13 where name=' 李刚';
Empty set (0.00 sec)mysql> select name from t13 where name='李 刚';
Empty set (0.00 sec)
 

 

用模糊查询 like,用like mysql就不会把末尾空格去掉。

精确的输入 

 
mysql> select name from t13 where name like '李刚  ';
Empty set (0.00 sec)

mysql> select name from t13 where name like '李刚       ';
Empty set (0.00 sec) # 后面补全三个空格可以查询出来
mysql> select name from t13 where name like '李刚   ';
+-----------+
| name      |
+-----------+
| 李杰      |
+-----------+
1 row in set (0.00 sec)
 

 

#常用字符串系列:char与varchar
注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。
因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡

 

大部分场景用char类型

 

建议
一张表里 不要char varchar混着用 ,要么全用char类型,要么全用varchar类型

 



 

转载于:https://www.cnblogs.com/mingerlcm/p/9799813.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365311.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树遍历规则

树的遍历顺序大体分为三种&#xff1a;前序遍历&#xff08;先根遍历、先序遍历&#xff09;&#xff0c;中序遍历&#xff08;中根遍历&#xff09;&#xff0c;后序遍历&#xff08;后根遍历&#xff09;。 如图所示二叉树&#xff1a; 前序遍历&#xff1a;前序遍历可以记为…

vue vue的table表格自适应_vue table autoHeight(vue 表格自动高度)

小编主要做的都是后台管理系统&#xff0c;采用布局多为头部、左侧菜单栏&#xff0c;右侧内容&#xff0c;头部和菜单栏固定位置&#xff0c;内容部分如果很长就会出现滚动条(iview和element都提供了布局容器)&#xff0c;后台管理系统多为表格的增删改查&#xff0c;so&#…

php网页的注册界面设计,HTML开发博客之注册页面设计(一)

CSS文件的引入新建文件reg.html文件首先我们来分析网页布局这是我们页面完成后的效果&#xff0c;网页分为三部分头部&#xff0c;主体&#xff0c;和底部我们按照这个顺序开始编写。头部导航栏的编写html>用户注册页面首页科技资讯心情随笔资源收藏图文图片留言板登陆/注册…

Arctext.js - 基于 CSS3 jQuery 的文本弯曲效果

Arctext.js 是基于 Lettering.js 的文本旋转插件&#xff0c;根据设置的旋转半径准确计算每个字母的旋转弧度并均匀分布。虽然 CSS3 也能够实现字符旋转效果&#xff0c;但是要让安排每个字母都沿着弯曲路径排布相当的复杂&#xff0c;结合 Arctext.js 则可以轻松实现这个效果。…

在JDT中使用Java 8 Lambda

旧 Curmudgeon 认识Smalltalk的Dude 在修改Eclipse Java开发工具 &#xff08;JDT&#xff09;项目正在开发的Java 8支持时&#xff0c;我一直在使用这种语言。 我承认我对Java 8中的lambda有点不满意。 当然&#xff0c;这来自于知道Smalltalk &#xff08;和LISP / Schem…

[POJ1463] Strategic game

题目链接&#xff1a; 传送门 题目大意&#xff1a; Bob非常享受玩电脑游戏的过程&#xff0c;尤其是策略游戏&#xff0c;但是在有些时候&#xff0c;他因为不能在第一时间找到最佳的策略而十分伤心。 现在&#xff0c;他遇到了一个问题。他必须保卫一个中世纪的城市&#xff…

zabbix邮件告警

zabbix邮件告警调用第三方邮件服务来发送邮件。 [roottiandong ~]# yum install mailx -y 修改配置文件 [roottiandong ~]# vim /etc/mail.rc 67 set from15600857257163.com smtpsmtp.163.com 68 set smtp-auth-user15600857257163.com 69 set smtp-auth-password密码&#xf…

模糊推理机制 matlab,基于模糊综合评判推理机制的学生素质评价系统设计与实现...

第22卷第2期2002年2月文章编号&#xff1a;(2002)l00l-908l2-008l-03计算机应用ComputerAppIicationsVoI.22,No.2Feb.,2002基于模糊综合评判推理机制的学生素质评价系统设计与实现尹世群(西南师范大学计算机与信息科学学院&#xff0c;重庆4007l5)摘要&#xff1a;根据模糊数学…

SweetAlert – 替代 Alert 的漂亮的提示效果

Sweet Alert 是一个替代传统的 JavaScript Alert 的漂亮提示效果。SweetAlert 自动居中对齐在页面中央&#xff0c;不管您使用的是台式电脑&#xff0c;手机或平板电脑看起来效果都很棒。另外提供了丰富的自定义配置选择&#xff0c;可以灵活控制。 在线演示 插件下载 您可…

onpagefinished等了很久才执行_今天自律了吗?停课不停锻炼 才是战疫正确姿势

近日&#xff0c;中青校媒面向全国915名高校学生发起关于“宅家运动”情况的调查&#xff0c;发现15.39%被调查者在家期间会严格执行锻炼计划&#xff0c;39.96%选择间歇性完成制订的运动目标&#xff0c;还有44.65%在家很少运动。(3月18日《中国青年报》)新冠肺炎疫情发生&…

Spring Data Couchbase 1.0 GA发布

Spring Data Couchbase 1.0 GA版本已发布&#xff01; 该项目是Spring Data项目的一部分&#xff0c;该项目旨在为新数据存储提供熟悉且一致的基于Spring的编程模型&#xff0c;同时保留特定于存储的功能。 Spring Data Couchbase项目提供了与Couchbase Server数据库的集成。 …

网络验证php接口逆向,一个专利查错的逆向(网络验证)

[C#] 纯文本查看 复制代码bool flag true;if (!fileInfo.CreationTime.ToString().Equals(configData.fileCreateTime))//这里是校验License&#xff0c;直接删除掉{MessageBox.Show("认证文件已损坏&#xff01;");flag false;Application.Exit();}if (flag){Lice…

kickstart-G

感觉自己很蠢&#xff0c;large数据只能交一次&#xff0c;忘记这回事了 A题 O(n^2)解法&#xff0c;用vector<set> 缓存j后面的数据&#xff0c;减少一重循环 1 #include <string>2 #include <vector>3 #include<iostream>4 #include<cstdio>5 …

Ocrad.js – JS 实现 OCR 光学字符识别

Ocrad.js 相当于是 Ocrad 项目的纯 JavaScript 版本&#xff0c;使用 Emscripten 自动转换。这是一个简单的 OCR &#xff08;光学字符识别&#xff09;程序&#xff0c;可以扫描图像中的文字回文本。 不像 GOCR.js&#xff0c;Ocrad.js 被设计成一个端口&#xff0c;而不是围绕…

c++ ptree判断是否存在节点_CTreeCtrl 查找 等于某值 的节点,并设置为高亮

查找节点&#xff0c;并返回该节点HTREEITEM GroupTree::FindTreeItem(HTREEITEM item,CString& strText){HTREEITEM hFind;if(item NULL)return NULL;while(item!NULL){if(m_pTree->GetItemText(item) strText)return item;if(m_pTree->ItemHasChildren(item))…

oracle安装出现getproces,oracle安装问题

一.引入问题帮朋友在CentOS上安装一个10g的Oracle&#xff0c;结果朋友的CentOS版本是6.2的版本&#xff0c;最新的一个版本&#xff0c;不过Linux上基本都差不多&#xff0c;所以按照以前的步骤&#xff0c;迅速的操作起来&#xff0c;结果遇到N多以前没有遇到过的错误。安装被…

使用Java和JCEKS进行AES-256加密

总览 由于最近爱德华斯诺登 &#xff08; Edward Snowden&#xff09;发布了文件以及针对JC Penny &#xff0c; Sony和Target等在线商业商店的黑客入侵&#xff0c;安全性已成为近年来讨论的重要话题。 虽然本文不会为您提供帮助防止使用非法来源数据的所有工具&#xff0c;但…

Sequence.js 实现带有视差滚动特效的图片滑块

Sequence.js 功能齐全&#xff0c;除了能实现之前分享过的现代的图片滑动效果&#xff0c;还可以融合当前非常流行的视差滚动&#xff08;Parallax Scrolling&#xff09;效果。让多层背景以不同的速度移动&#xff0c;形成立体的运动效果&#xff0c;带来非常出色的视觉体验。…

【SQL Server 学习系列】-- sql 随机生成中文名字

【SQL Server 学习系列】-- sql 随机生成中文名字 原文:【SQL Server 学习系列】-- sql 随机生成中文名字1 DECLARE fName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)) -- 姓氏2 DECLARE lName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)…

本地方法栈线程公有_Java运行时区域,哪些区域是线程私有的?哪些是共有的?...

JVM 运行时数据区域大致可以分为&#xff1a;程序计数器、虚拟机栈、本地方法栈、堆区、元空间、运行时常量池、直接内存等区域&#xff1b;就是下面这个样子的&#xff1a;其中有些区域&#xff0c;随着 JDK 版本的升级不断调整&#xff0c;例如&#xff1a;JDK 1.6&#xff0…