"

目录

字符类型

char类型

varchar类型

实测

总结

枚举类型与集合类型


字符类型

官网:https://dev.mysql.com/doc/refman/5.7/en/char.html
注意:char与varchar括号内的参数指的是字符的固定长度

char类型

定长,简单粗暴,浪费空间,存取速度

  • 字符长度:0 ~ 255(一个中文是一个字符,是utf8编码的3个字节)
    例如:指定长度为10,存>10个字符则报错,存<10个字符则用空格填充直到凑够10个字符存储.
  • 检索:在检索时,显示的结果会自动删除尾部的空格,除非打开pad_char_to_full_length SQL模式

    (设置SQL模式:set  sql_mode = 'pad_char_to_full_length'; 查询sql的默认模式:select @@sql_mode;)

varchar类型

变长,精确,节省空间,存取速度慢

  • 字符长度:0 ~ 65535(如果大于21845会提示用其它类型,MySQL行最大限制为65535字节,字符编码为utf8:官方文档
  • 存储:varchar类型存储数据的真实内容,不会用空格填充,也不会在查询时过滤尾部的空格.
    强调:varchar类型会在真实数据前加1-2bytes的前缀,该前缀用来表示真实数据的bytes字节数(1-2bytes最大表示65535长度,正好符合MySQL对row的最大字节限制,即已足够使用).

    [如果真实数据<255bytes,则需要1bytes的前缀(1bytes=8bit 2**8最大表示的数字为255);如果真实数据>255bytes,则需要2bytes的前缀(2bytes=16bit 2**16最大表示的数字为65535)]
  • 检索:尾部有空格会保存下来,在检索时也会正常显示包含空格在内的内容.

char 与 varchar 的官方解释:

实测

测试之前先来了解两个函数:

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

  1. # 创建测试表,分别指明字段x为char类型,字段y为varchar类型
  2. mysql> create table test(x char(5), y varchar(5));
  3. Query OK, 0 rows affected (0.11 sec)
  4. # 插入数据,后面加空格
  5. mysql> insert into test values("数据库 ", "数据库 ");
  6. Query OK, 1 row affected (0.00 sec)
  7. # 在检索时,char类型会过滤掉后面的空格,而varchar正常显示
  8. mysql> select x, char_length(x), y, char_length(y) from test;
  9. +-----------+----------------+------------+----------------+
  10. | x | char_length(x) | y | char_length(y) |
  11. +-----------+----------------+------------+----------------+
  12. | 数据库 | 3 | 数据库 | 4 |
  13. +-----------+----------------+------------+----------------+
  14. 1 row in set (0.00 sec)
  15. # 设置SQL模式,使char类型原形毕露
  16. mysql> set sql_mode = 'pad_char_to_full_length';
  17. Query OK, 0 rows affected, 1 warning (0.00 sec)
  18. # 查当前SQL模式
  19. mysql> select @@sql_mode;
  20. +-------------------------+
  21. | @@sql_mode |
  22. +-------------------------+
  23. | PAD_CHAR_TO_FULL_LENGTH |
  24. +-------------------------+
  25. 1 row in set (0.00 sec)
  26. # 再次检索,发现char类型的数据是占满规定的长度的(在后面填充空格)
  27. mysql> select x, char_length(x), y, char_length(y) from test;
  28. +-------------+----------------+------------+----------------+
  29. | x | char_length(x) | y | char_length(y) |
  30. +-------------+----------------+------------+----------------+
  31. | 数据库 | 5 | 数据库 | 4 |
  32. +-------------+----------------+------------+----------------+
  33. 1 row in set (0.00 sec)
  34. # 查看字节数
  35. # char类型:3个中文字符 + 两个空格 = 11bytes
  36. # varchar类型:3个中文字符 + 1个空格 = 10bytes
  37. mysql> select x, length(x), y, length(y) from test;
  38. +-------------+-----------+------------+-----------+
  39. | x | length(x) | y | length(y) |
  40. +-------------+-----------+------------+-----------+
  41. | 数据库 | 11 | 数据库 | 10 |
  42. +-------------+-----------+------------+-----------+
  43. 1 row in set (0.01 sec)

总结

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

其它字符串系列(效率:char > varchar > text):

  1. TEXT系列    TINYTEXT TEXT MEDIUMTEXT LONGTEXT
  2. BLOB 系列    TINYBLOB BLOB MEDIUMBLOB LONGBLOB
  3. BINARY系列    BINARY VARBINARY

TEXT系列:text数据类型用于保存变长的大字符串,可以最多到65535(2**16 - 1)个字符

mediumtext:A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.

longtext:A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters.


枚举类型与集合类型

即字段的值只能在规定范围中选择,如单选框,多选框
enum枚举:即单选,只能在给定的范围内选一个值.(如:性别 sex boy/girl)
set集合:即多选,在给定的范围内可以选择一个或一个以上的值.(如:爱好1,爱好2,爱好3)


  1. mysql> create table information(
  2. -> name char(3),
  3. -> sex enum("男", "女"),
  4. -> hobby set("抽烟", "喝酒", "烫头")
  5. -> );
  6. Query OK, 0 rows affected (0.05 sec)
  7. mysql> insert into information values
  8. -> ("张三", "男", "抽烟,喝酒"),
  9. -> ("李四", "女", "烫头");
  10. Query OK, 2 rows affected (0.00 sec)
  11. Records: 2 Duplicates: 0 Warnings: 0
  12. mysql> select * from information;
  13. +---------+------+---------------+
  14. | name | sex | hobby |
  15. +---------+------+---------------+
  16. | 张三 | 男 | 抽烟,喝酒 |
  17. | 李四 | 女 | 烫头 |
  18. +---------+------+---------------+
  19. 2 rows in set (0.00 sec)


"

【MySQL】数据类型之字符相关的更多相关文章

  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. 快速将Navicat中数据表信息导出

    1.使用navicat工具  2.新建查询  SELECT COLUMN_NAME 字段名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_L ...

  2. 10个Spring Boot快速开发的项目,接私活利器(快速、高效)

    本文为大家精选了 码云 上优秀的 Spring Boot 语言开源项目,涵盖了企业级系统框架.文件文档系统.秒杀系统.微服务化系统.后台管理系统等,希望能够给大家带来一点帮助:) 1.项目名称:分布式 ...

  3. jquery validate验证插件扩展方法(转)

    /***************************************************************** jQuery Validate扩展验证方法 (linjq) *** ...

  4. 220. 存在重复元素 III

    题目: 给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ. 示例 1: ...

  5. 阿里云 Linux 挂在硬盘 翻了几篇这个最好

    原文 :https://www.jianshu.com/p/fa587bbfbb60 阿里云数据盘挂载完整过程 阿里云挂载云盘第一步 在阿里云管理员后台,云盘管理中心挂载好云盘在哪个服务器上面. 登录 ...

  6. wamp配置本地多站点。

    ' 进入C:\wamp64\wamp64\bin\apache\apache2.4.37\conf\http.conf 首先确保httpd-vhosts.conf扩展文件引入进来了,部分版本默认是不引 ...

  7. unittest的命令执行

    命令窗口执行: 1.可以在命令窗口下执行单个module.class.method python -m unittest test_module1 test_module2 python -m uni ...

  8. 洛谷 P3805【模板】manacher算法

    题目链接:https://www.luogu.com.cn/problem/P3805 Manacher算法$O(n)$: 求以每个字符为中心的最长回文串的半径:如果要求可以以字符间隙为回文中心,就要 ...

  9. Wx-小程序-使用canvas截图保存

    1. wxml 页面 使用画布来站位,并给按钮添加绑定事件 <button class='btn btn-theme' bindtap='setSaveImage'>保存图片到本地< ...

  10. js实现页面下拉后展示导航,以及点击导航自动滑动到相关页面

    //监控,下拉750px后展示导航 $(window).scroll(function(){ var $this = $(this); var targetTop = $(this).scrollTo ...