字符类型

  1. #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html
  2. #注意:char和varchar括号内的参数指的都是字符的长度
  3. #char类型:定长,简单粗暴,浪费空间,存取速度快
  4. 字符长度范围:0-255(一个中文是一个字符,是utf8编码的3个字节)
  5. 存储:
  6. 存储char类型的值时,会往右填充空格来满足长度
  7. 例如:指定长度为10,存>10个字符则报错,存<10个字符则用空格填充直到凑够10个字符存储
  8. 检索:
  9. 在检索或者说查询时,查出的结果会自动删除尾部的空格,除非我们打开pad_char_to_full_length SQL模式(SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';)
  10. #varchar类型:变长,精准,节省空间,存取速度慢
  11. 字符长度范围:0-65535(如果大于21845会提示用其他类型 mysql行最大限制为65535字节,字符编码为utf-8https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html)
  12. 存储:
  13. varchar类型存储数据的真实内容,不会用空格填充,如果'ab ',尾部的空格也会被存起来
  14. 强调:varchar类型会在真实数据前加1-2Bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2Bytes最大表示65535个数字,正好符合mysqlrow的最大字节限制,即已经足够使用)
  15. 如果真实的数据<255bytes则需要1Bytes的前缀(1Bytes=8bit 2**8最大表示的数字为255
  16. 如果真实的数据>255bytes则需要2Bytes的前缀(2Bytes=16bit 2**16最大表示的数字为65535
  17. 检索:
  18. 尾部有空格会保存下来,在检索或者说查询时,也会正常显示包含空格在内的内容

官网解释如下测试前了解两个函数

  1. length:查看字节数
  2. char_length:查看字符数

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

  1. mysql> create table t1(x char(5),y varchar(5));
  2. Query OK, 0 rows affected (0.26 sec)
  3. #char存5个字符,而varchar存4个字符
  4. mysql> insert into t1 values('你瞅啥 ','你瞅啥 ');
  5. Query OK, 1 row affected (0.05 sec)
  6. mysql> SET sql_mode='';
  7. Query OK, 0 rows affected, 1 warning (0.00 sec)
  8. #在检索时char很不要脸地将自己浪费的2个字符给删掉了,装的好像自己没浪费过空间一样,而varchar很老实,存了多少,就显示多少
  9. mysql> select x,char_length(x),y,char_length(y) from t1;
  10. +-----------+----------------+------------+----------------+
  11. | x | char_length(x) | y | char_length(y) |
  12. +-----------+----------------+------------+----------------+
  13. | 你瞅啥 | 3 | 你瞅啥 | 4 |
  14. +-----------+----------------+------------+----------------+
  15. row in set (0.00 sec)
  16. #略施小计,让char现出原形
  17. mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
  18. Query OK, 0 rows affected (0.00 sec)
  19. #这下子char原形毕露了......
  20. mysql> select x,char_length(x),y,char_length(y) from t1;
  21. +-------------+----------------+------------+----------------+
  22. | x | char_length(x) | y | char_length(y) |
  23. +-------------+----------------+------------+----------------+
  24. | 你瞅啥 | 5 | 你瞅啥 | 4 |
  25. +-------------+----------------+------------+----------------+
  26. row in set (0.00 sec)
  27. #char类型:3个中文字符+2个空格=11Bytes
  28. #varchar类型:3个中文字符+1个空格=10Bytes
  29. mysql> select x,length(x),y,length(y) from t1;
  30. +-------------+-----------+------------+-----------+
  31. | x | length(x) | y | length(y) |
  32. +-------------+-----------+------------+-----------+
  33. | 你瞅啥 | 11 | 你瞅啥 | 10 |
  34. +-------------+-----------+------------+-----------+
  35. row in set (0.00 sec)

2. 虽然 CHAR 和 VARCHAR 的存储方式不太相同,但是对于两个字符串的比较,都只比 较其值,忽略 CHAR 值存在的右填充,即使将 SQL _MODE 设置为 PAD_CHAR_TO_FULL_ LENGTH 也一样,,但这不适用于like

  1. Values in CHAR and VARCHAR columns are sorted and compared according to the character set collation assigned to the column.
  2. All MySQL collations are of type PAD SPACE. This means that all CHAR, VARCHAR, and TEXT values are compared without regard to any trailing spaces. Comparison in this context does not include the LIKE pattern-matching operator, for which trailing spaces are significant. For example:
  3. mysql> CREATE TABLE names (myname CHAR(10));
  4. Query OK, 0 rows affected (0.03 sec)
  5. mysql> INSERT INTO names VALUES ('Monty');
  6. Query OK, 1 row affected (0.00 sec)
  7. mysql> SELECT myname = 'Monty', myname = 'Monty ' FROM names;
  8. +------------------+--------------------+
  9. | myname = 'Monty' | myname = 'Monty ' |
  10. +------------------+--------------------+
  11. | 1 | 1 |
  12. +------------------+--------------------+
  13. row in set (0.00 sec)
  14. mysql> SELECT myname LIKE 'Monty', myname LIKE 'Monty ' FROM names;
  15. +---------------------+-----------------------+
  16. | myname LIKE 'Monty' | myname LIKE 'Monty ' |
  17. +---------------------+-----------------------+
  18. | 1 | 0 |
  19. +---------------------+-----------------------+
  20. row in set (0.00 sec)

3. 总结

  1. #常用字符串系列:char与varchar
  2. 注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
  3. #其他字符串系列(效率:char>varchar>text)
  4. TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
  5. BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB
  6. BINARY系列 BINARY VARBINARY
  7. texttext数据类型用于保存变长的大字符串,可以组多到65535 (2**16 1)个字符。
  8. mediumtextA TEXT column with a maximum length of 16,777,215 (2**24 1) characters.
  9. longtextA TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 1) characters.

mysql字符类型的更多相关文章

  1. mysql字符类型大小写敏感的讨论

    mysql字符类型默认是不区分大小写的,即select * from t where name='AAA'与='aaa'没区别,以下是测试的例子 (root)); (root,,,,'BbB'); ( ...

  2. MySQL字符类型datetime与timestamp

    这片博客来详细分区一下这哥俩! 首先来说明这两个字符类型: DATETIME 8 1000-01-01 00:00:00 ~9999~12-31 23:59:59 0000-00-00 00:00:0 ...

  3. mysql string types ---- mysql 字符类型详解

    一.mysql 中包涵的字符类型: [national] char [(m)] [character set charset_name] [collate collation_name] [natio ...

  4. MySQL字符类型学习笔记

    目录 一.字符集和字符编码 1.1.字符集 1.2.字符编码 二.字符集排序规则 2.1.排序规则定义 2.2 .排序规则特征 三.CHAR和VARCHAR 3.1.CHAR类型 3.2.VARCHA ...

  5. MySQL 字符类型

    字符类型 MySQL提供了多种关于字符存储的类型,但是在大多数情况下我们只使用char和varchar即可 类型 大小 用途 CHAR 0-255字节 定长字符串 VARCHAR 0-65535 字节 ...

  6. Mysql字符类型比较

    一. binary和char比较: binary 字节为单位,char字符为单位,字符占几个字节取决于字符集 binary  比较规则基于字节值,char基于字符,即使是_bin的比较规则 范围都0- ...

  7. MYSQL字符类型数值排序

    今天遇到MySQL数字排序问题,我的排序字段是经过计算后的,而计算后的字段直接拿来排序就会按照字符一个个排序,所以这里找到简单的方法, ORDER BY 排序字段* 或者 ORDER BY 排序字段+ ...

  8. mysql字符类型总结及常用字符函数

    常用字符串函数: concat(s1,s2,s3..)       连接s1,s2,...sn为一个字符串 INSERT(str,x,y,instr)将字符串str从x位置开始,y个字符串替换为字符串 ...

  9. mysql数值类型总结及常用函数

    最近在学习下,总结一下mysql数值类型: mysql字符类型分: 1.整数类型: 字节                    值范围 INTERGER               1         ...

随机推荐

  1. 【LABVIEW到C#】4》String的操作之Search and Replace.vi

    C#封装如下: public class SearchAndRepalce : Darrenstring { public bool replaced; private string stringou ...

  2. python之list,tuple,str,dic简单记录(二)

    切片对象:例子:In [13]: l = [1,23,4,5,5,6,8]In [14]: l[::1]Out[14]: [1, 23, 4, 5, 5, 6, 8] In [15]: l[::2]O ...

  3. lightoj1213推公式

    很容易推出来的公式ans=n^(k-1)*k*sum 然后快速幂就好了 #include<map> #include<set> #include<cmath> #i ...

  4. [csharp] bool IsNumeric(Type type)

    /* "C:\Program Files (x86)\MSBuild\14.0\Bin\csc.exe" /out:IsNumericType.exe IsNumericType. ...

  5. Juniper

    Juniper Networks[编辑]     Juniper Networks 公司类型 上市(NYSE:JNPR) 成立 1996年2月 代表人物 执行长:Shaygan Kheradpir技术 ...

  6. sql日期函数总结

    sql 时间转换格式 convert(varchar(10),字段名,转换格式)   convert(varchar(10),字段名,转换格式) CONVERT(nvarchar(10),count_ ...

  7. mysql注入介绍

    0. SQL注入常用的尝试语句: or 1=1--+ 'or 1=1--+ "or 1=1--+ )or 1=1--+ ')or 1=1--+ ") or 1=1--+ " ...

  8. Activiti 教程

    Activiti入门教程:http://blog.csdn.net/column/details/activitizhou.html Activiti 5.15 用户手册:http://www.cnb ...

  9. How to Have a Healthy Relationship --shanbei 为单身节写

    我在扇贝发现一片好文. Sometimes relationships can seem like a lot of work until you sit back and realize just ...

  10. Lua学习---编译生成lua和luac

    众所周知,Lua是一种强大的脚本语言,并且这种语言是用C语言实现的.为什么要学习这门语言?因为它可以增强我看C语言代码的功底. 我下的Lua版本是Lua5.3,关于Lua5.3的简介如下: http: ...