• 掌握char类型和varchar类型
  • 掌握枚举类型和集合类型

字符类型

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

官网解释如下:

验证:

验证之前了解两个函数:

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

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

  1. # 创建t1表,分别指明字段x为char类型,字段y为varchar类型
  2. mysql> create table t1(x char(5),y varchar(4));
  3. Query OK, 0 rows affected (0.16 sec)
  4.  
  5. # char存放的是5个字符,而varchar存4个字符
  6. mysql> insert into t1 values('你瞅啥 ','你瞅啥 ');
  7. Query OK, 1 row affected (0.01 sec)
  8.  
  9. # 在检索时char很不要脸地将自己浪费的2个字符给删掉了,装的好像自己没浪费过空间一样,而varchar很老实,存了多少,就显示多少
  10. mysql> select x,char_length(x),y,char_length(y) from t1;
  11. +-----------+----------------+------------+----------------+
  12. | x | char_length(x) | y | char_length(y) |
  13. +-----------+----------------+------------+----------------+
  14. | 你瞅啥 | 3 | 你瞅啥 | 4 |
  15. +-----------+----------------+------------+----------------+
  16. 1 row in set (0.02 sec)
  17.  
  18. #略施小计,让char现原形
  19. mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
  20. Query OK, 0 rows affected (0.00 sec)
  21.  
  22. #查看当前mysql的mode模式
  23. mysql> select @@sql_mode;
  24. +-------------------------+
  25. | @@sql_mode |
  26. +-------------------------+
  27. | PAD_CHAR_TO_FULL_LENGTH |
  28. +-------------------------+
  29. 1 row in set (0.00 sec)
  30.  
  31. #原形毕露了吧。。。。
  32. mysql> select x,char_length(x) y,char_length(y) from t1;
  33. +-------------+------+----------------+
  34. | x | y | char_length(y) |
  35. +-------------+------+----------------+
  36. | 你瞅啥 | 5 | 4 |
  37. +-------------+------+----------------+
  38. 1 row in set (0.00 sec)
  39.  
  40. # 查看字节数
  41. #char类型:3个中文字符+2个空格=11Bytes
  42. #varchar类型:3个中文字符+1个空格=10Bytes
  43. mysql> select x,length(x),y,length(y) from t1;
  44. +-------------+-----------+------------+-----------+
  45. | x | length(x) | y | length(y) |
  46. +-------------+-----------+------------+-----------+
  47. | 你瞅啥 | 11 | 你瞅啥 | 10 |
  48. +-------------+-----------+------------+-----------+
  49. 1 row in set (0.02 sec)

总结:

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

枚举类型和集合类型

字段的值只能在给定范围中选择,如单选框,多选框

enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female

set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)

  1. mysql> create table consumer(
  2. -> id int,
  3. -> name varchar(50),
  4. -> sex enum('male','female','other'),
  5. -> level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一
  6. -> fav set('play','music','read','study') #在指定范围内,多选多
  7. -> );
  8. Query OK, 0 rows affected (0.03 sec)
  9.  
  10. mysql> insert into consumer values
  11. -> (1,'赵云','male','vip2','read,study'),
  12. -> (2,'赵云2','other','vip4','play');
  13. Query OK, 2 rows affected (0.00 sec)
  14. Records: 2 Duplicates: 0 Warnings: 0
  15.  
  16. mysql> select * from consumer;
  17. +------+---------+-------+-------+------------+
  18. | id | name | sex | level | fav |
  19. +------+---------+-------+-------+------------+
  20. | 1 | 赵云 | male | vip2 | read,study |
  21. | 2 | 赵云2 | other | vip4 | play |
  22. +------+---------+-------+-------+------------+
  23. 2 rows in set (0.00 sec)

Mysql -- 数据类型(2)的更多相关文章

  1. mysql 数据类型

    1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) ...

  2. MySQL 数据类型 详解

    MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My ...

  3. MySQL数据类型的验证

    CHAR char (M) M字符,长度是M*字符编码长度,M最大255. 验证如下: mysql)) default charset=utf8; ERROR (): ); use BLOB or T ...

  4. MySQL数据类型 int(M) 表示什么意思?详解mysql int类型的长度值问题

    MySQL 数据类型中的 integer types 有点奇怪.你可能会见到诸如:int(3).int(4).int(8) 之类的 int 数据类型.刚接触 MySQL 的时候,我还以为 int(3) ...

  5. 浅谈MySQL数据类型

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 一.数值类型 MySQL支持所有标 ...

  6. MySQL数据类型——数值类型

    1.1.1 整型 整型 占用字节 范围 范围 tinyint 1 -27~27-1 -128~127 smallint 2 -215~215-1 -32768~32767 mediumint 3 -2 ...

  7. 【转】MySQL数据类型和常用字段属性总结

    来源:http://www.jb51.net/article/55853.htm 这里先总结数据类型.MySQL中的数据类型大的方面来分,可以分为:日期和时间.数值,以及字符串.下面就分开来进行总结. ...

  8. Oracle、SQL Server、MySQL数据类型对比

    1,标准SQL数据类型 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中.不需数据转换(例如,转换到文本数据).数据输入二进制字段的方式决定了它的输出方式. BIT 1 个字 ...

  9. MySQL数据类型和常用字段属性总结

    前言 好比C++中,定义int类型需要多少字节,定义double类型需要多少字节一样,MySQL对表每个列中的数据也会实行严格控制,这是数据驱动应用程序成功的关键.MySQL提供了一组可以赋给表中各个 ...

  10. MySql数据类型详解

    可配合http://www.cnblogs.com/langtianya/archive/2013/03/10/2952442.html学习 MySql数据类型 1.整型(xxxint)   MySQ ...

随机推荐

  1. typeScript函数篇

    typeScript的函数是在es6的函数特性的基础上加了一些后端的概念:泛型.参数类型声明.返回值类型声明.重载.装饰器等.其他的一些特性:箭头函数.生成器.async-await.promise等 ...

  2. vue 使用微信JSSDK,在IOS端会授权出错

    原因: vue-router切换的时候操作的都是浏览器的历史记录,iOS会把第一次刚进入时的URL作为真实URL,安卓会把当前URL作为真实URL. 所以导致后端在配置好的授权参数获得的config参 ...

  3. js 实现的页面图片放大器以及 event中的诸多 x

    背景: 淘宝.天猫等电商网站浏览图片时可以查看大图的功能: 思路: 思路很简单,两张图片,一张较小渲染在页面上,一张较大是细节图,随鼠标事件调整它的 left & top; 需要的知识点: o ...

  4. CentOS_7升级系统内核

    最近,在虚拟机中安装docker成功之后,尝试运行docker run hello-world时出现以下错误: $ sudo docker run hello-world Unable to find ...

  5. 常用CSS3

    (ಥ_ಥ)    啊啊,我的胃好疼啊.感觉最近胃又开始不舒服了.啊——果然老了呢,想当初,我也是不坏金刚之身来着呢,唉,我的可怜的小胃胃   (ಥ_ಥ) 记录几个已经常见的不能再常见的css3样式. ...

  6. poj-2516(最小费用流)

    题意:有n个商店,每个商店有k种货物,每个货物需要a[n][k]个,有m个仓库,每个仓库也有k种货物,每个货物有b[m][k]个,然后k个矩阵,每个矩阵都是n*m的,第i行第j列表示从仓库j到商店i每 ...

  7. 【Machine Translation】CMU的NMT教程论文:最全面的神经机器翻译学习教程

    这是一篇CMU发的神经机器翻译教程论文,很全很详细,适合新手阅读,即使没有什么MT.DNN.RNN的基础知识. 另外它还配套了CMU自己的一个框架DyNet的练习. 全文共9章,从统计语言模型到DNN ...

  8. 第六十四天 JS基础操作

    一.分支结构 1.if语句 if基础语句 if(条件表达式){ 代码块: } // 当条件表达式结果为true,会执行代码块:反之不执行 // 条件表达式可以为普通表达式 // 0.undefined ...

  9. 【LOJ6067】【2017 山东一轮集训 Day3】第三题 FFT

    [LOJ6067][2017 山东一轮集训 Day3]第三题 FFT 题目大意 给你 \(n,b,c,d,e,a_0,a_1,\ldots,a_{n-1}\),定义 \[ \begin{align} ...

  10. 监控MySQL|Redis|MongoDB的执行语句(go-sniffer)

    上节回顾:https://www.cnblogs.com/dotnetcrazy/p/9986873.html 以CentOS为例: 1.环境 PS:如果不需要Golang环境,可以编译后把执行文件c ...