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类型
mysql 字符串类型 char varchar的更多相关文章
- mysql列类型char,varchar,text,tinytext,mediumtext,longtext的比较与选择
储存不区分大小写的字符数据 TINYTEXT 最大长度是 255 (2^8 – 1) 个字符. TEXT 最大长度是 65535 (2^16 – 1) 个字符. MEDIUMTEXT 最大长度是 16 ...
- MySQL——字符串类型——char(n) 和 varchar(n)
MySQL 的 char(n) 和 varchar(n) 括号中 n 代表字符的个数,而非字节个数,这里说的字符不论文字种类,假设一个字段的数据类型被规定为 char(2),则可以在这个字段上插入 ' ...
- mysql字符串类型(char,varchar)
原文链接:https://blog.csdn.net/puqutogether/article/details/45648879 MySQL中的字符串有两个常用的类型:char和varchar,二者各 ...
- MySQL字符串类型转换时间类型
如果MySQL数据库里面的某个时间用的是varchar(或者是char)类型的,这样可以方便系统使用而不用随便转换时间类型来适应数据库版本的不同,当要把取出的字段转换成时间类型的时候,可以按如下方法操 ...
- mysql字符串类型数据
字符串类型是在数据库中存储字符串的数据类型,字符串类型包括char,varchar,text,enum和set. OK,我们来一个一个的看下上面提到的几种类型. char类型和varchar类型 ch ...
- 学习笔记:MySQL字符串类型
字符串类型 a) char和varchar 1.都需要指定字符的长度,char中的长度是字符的长度,而varchar的长度是字节的长度 2. char中指定的长度就是实际占用的长度,而 ...
- MySQL字符串类型
VARCHAR类型用于存储变长字符串,它会删除末尾的所有空格,它比定长字符串更省空间,因为它仅使用必要的空间(越短的字符串占用越少),VARCHAR会用1或2个额外字节记录字符串长度(如果字符串长度不 ...
- mysql中字符串类型char(n)和varchar(n)的区别
n的含义 根据网络上找到的结果(不能保证准确),在5.0.3以后版本中,n均代表字符数,而不是字节数:我用来测试的版本是5.7.20,该版本中,n表示字符数. 验证过程如下 建表 CREATE TAB ...
- mysql字符串类型(set类型)
集合 set 不定想项选 类似于 enum枚举,在定义时,也需要指定其已有值! 与字符串相比,优势是: 1, 也是采用 整数进行管理的!采用位运算,从第一位开始为1,逐一x2! 2, 每个集合类型8 ...
随机推荐
- 当进行make命令学习是出现error trying to exec 'cc1': execvp: No such file or directory
进行编译的时候总是会出现这种状况 error trying to exec 'cc1': execvp: No such file or directory 自己把程序改了又改,改的很简单之后还是出现 ...
- Mybatis的resultMap返回map
<resultMap type="Map" id="bankMaintainMap"> <result column="bank_n ...
- 手机端点击复制链接到剪切板(以及PC端)
一直在找如何能点击按钮将一串字符串放到手机的剪切板上,但是可能是因为搜索的关键字不对,一直无果. 向同事请教了一下,给了一个clickboard.js的插件.开始试验的时候,使用手机自带浏览器进行测试 ...
- input回车问题
今天有一个问题,就是input对象没有加任何事件自己回车导致跳到了404页面.处理的时候,并发现没找到回车事件的控制. 那么只有一种情况,就是自带的回车控制. 百度了一下,如下面博文里面的写法.我这边 ...
- thinkphp5.0 获取请求信息
如果要获取当前的请求信息,可以使用\think\Request类,除了下文中的 $request = Request::instance(); 也可以使用助手函数 $request = request ...
- 免费的Web服务
这个网站包括和很多免费的Web服务,比如传说中的天气预报.手机号归属地.IP地址归属地.列车时刻表.邮箱验证.验证码图片生成.还有什么股票,基金 http://www.webxml.com.cn/zh ...
- GOOGLE CODE ANDROID 开源项目 集合
转:http://blog.csdn.net/dellheng/article/details/7163333 1. ZXing http://code.google.com/p/zx ...
- Jrebel不生效的原因和解决办法
一.问题原因和解决办法 我这里用的是idea,装了jrebel.之前用的好好的. 后边新建了一个project,不知道为啥,感觉总是不生效,虽然显示class reload了,但感觉还是没起作用. 后 ...
- linux中守护进程启停工具start-stop-daemon
1.功能作用 启动和停止系统守护程序 2.位置 /sbin/start-stop-daemon 3.主要参数 Commands: -S|--start -- <argument> ... ...
- selenium中javascript调试
之前写了使用js输入长文件的文章,有同事在使用时,发现竟然无法输入,也不知道是什么原因,且用的还是id方式. 在参考网文后,才发现是js写的有问题,现总结一下 javascript调试,在firefo ...