![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5iZycDZwUmNmFzMhVjZ2QWYzUGNyEDOzUWMlN2NjRmZ48CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
点击关注,我们共同每天进步一点点!
1 字符类型
MySQL提供了多种关于字符存储的类型,但是在大多数情况下我们只使用char和varchar即可
2 字符集
字符串分二进制与非二进制类型,二进制用于储存图片、声音等文件,非二进制用于储存文本数据。
非二进制文本受字符集和校对规则影响。
其实字符集说白了就是字符编码。
2|1概念解析
字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。常用的字符集有GBK、BIG5、UTF8。
UTF8字符集包含文字内容更广,如韩文、日文、德文兼容度更高,也是推荐使用的字符集(UTF8MB4)。
表不设置字符集继承数据库,字段不设置字符集继承表的,所以一般我们在配置文件中为数据库指定字符集即可
2|2校对规则
字符集内用于字符比较和排序的一套规则,以_ci结束的为大小写不敏感、_bin结束的为不区分大小写。
当使用不区分大小写的校对规则时A与a是相同的,否则则不相同,这会影响到排序与比对。
修改表校对规则,对表的原字段将不影响,只对新增字段影响
3 基本定义
对于字符类型而言,其指定宽度均为存入宽度,以字符为单位。
4 定长变长
4|1区别差异
char是定长字符串,当存入的字符数量不足指定宽度时,将会使用进行填充。
varchar是变长字符串,当存入的字符数类不足指定宽度时,不会使用任何字符进行填充。
通常情况下来讲,char的存取速度要比varchar要高(约50%),但是更加浪费磁盘空间。
在InnoDB存储引擎中,不存在这种差异。
差异详解
#
由于varchar类型是变长存储,所以需要有一个头部来标识真实内容占了多少字符,这个头部通常占据1个字节。
即存入abcd的时候算上头部实际上是占用了5个字节。这也是为什么说通常情况下varchar比较节省内存,而不是说全部情况。
4|2差异对比
如果要想进定长与变长的差异对比试验,需要用到以下两个函数。
length():查看字节数
char_length():查看字符数
mysql>
小总结:建议在同一张数据表中统一使用varchar或char类型,这里更推荐使用char类型。
5 常用函数
5|1大小写转换
upper()小写转大写,lower()大写转小写
mysql>
5|2指定量取
left()与right()函数用于取左或右指定数量的字符
以下将示例取左边3个字符。
mysql>
5|3中间字符
mid()从中间取字符串,参数二为指定起始位置(从1开始),参数三为取的字符数量(可不指定,一直取完)。
以下将演示从第二个字符开始取两个。
mysql>
5|4截取子串
substring()从指定起始位置开始取出向右所有字符串,可指定结束位置。(其实我感觉这个和mid()好像没啥区别)
mysql>
5|5字符长度
char_length()可获取字符长度,如果要获取char类型的字符长度且包括填充空白符,需要修改sql模式。
修改sql模式:SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
mysql>
5|6字节长度
length()可获取字节长度。
mysql>
5|7字符连接
concat()可将多段字符进行连接。
以下示例将展示一二三四五,---以及12345这三段字符的连接。
mysql>
原文地址: https://www.cnblogs.com/Yunya-Cnblogs/p/13585668.html
喜欢请关注,有用请转发~
升职、加薪、无漏测-点“在看”