【MySQL】数据类型之字符相关 -- 2019-08-11 19:28:15

原文: http://106.13.73.98/__/22/

目录

字符类型

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 的官方解释:

![在这里插入图片描述](http://106.13.73.98/media/ai/2019-03/19ee0315-2e73-4b2a-b94a-598f26d0a8d1.png)

实测

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

  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)


原文: http://106.13.73.98/__/22/

原文地址:https://www.cnblogs.com/gqy02/p/11336288.html

时间: 2024-10-08 07:41:54

【MySQL】数据类型之字符相关 -- 2019-08-11 19:28:15的相关文章

DF学Mysql(三)——Mysql数据类型

Mysql数据类型分为:整数类型.浮点数类型.定点数类型日期与时间类型字符串类型二进制类型 整数类型 字节数 无符号数取值范围 有符号数取值范围TINYINT 1 0-255 -128-127SMALLINT 2 0-65535 -32768-32767MEDIUMINT 3 0-16777215 -8388608-8388607INT 4 0-4294967295 -2147483648-2147483647INTGER 4 0-4294967295 -2147483648-214748364

Java数据类型和MySql数据类型对应表(转)

Java数据类型和MySql数据类型对应表 java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N CHAR java.lang.String 1   BLOB L+N BLOB java.lang.byte[] -4   TEXT 65535 VARCHAR java.lang.String -1        

Java数据类型和MySql数据类型对应表

Java数据类型和MySql数据类型对应表: 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR N CHAR java.lang.String 1 BLOB L+N BLOB java.lang.byte[] -4 TEXT 65535 VARCHAR java.lang.String -1 INTEGER 4 INTEGER UNSIGNED java.lang.Long 4 TI

mysql数据库从删库到跑路之mysql数据类型

一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data-types.html http://dev.mysql.com/doc/refman/5.7/en/data-type-overview.html mysql数据类型概览 1 数字(默认都是有符号,宽度指的是显示宽度,与存储无关) tinyint int bigint:个数,年龄,id,qq号,手

Java数据类型和MySql数据类型对应一览

类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N CHAR java.lang.String 1   BLOB L+N BLOB java.lang.byte[] -4   TEXT 65535 VARCHAR java.lang.String -1               INTEGER 4 INTEGER UNSIGNED java.la

MySQL数据类型以及基本使用详解

MySQL数据类型以及基本使用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL服务器的主要组件 我们知道MySQL的主要组件主要是由服务端(mysqld)和客户端(mysql)组成的.它们都共用一个配置文件(通常叫做my.cnf),这个配置文件很独特,它需要使用中括号括起来标明是为哪种组件使用的,例如[mysql]下面的指令就表示为客户端配置的参数,如果[mysqld]下面的指令就表示为服务端配置的参数.其实MySQL的客户端组件有很多个,本篇博客是用的my

Java MySQL数据类型对照

Java MySQL数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             varchar L+N VARCHAR java.lang.String 12   char N CHAR java.lang.String 1   blob L+N BLOB java.lang.byte[] -4   text 65535 VARCHAR java.lang.String -1               integer 4 INTEGER

mysql 数据库服务概述 、 构建MySQL服务器 、 数据库基本管理 、 MySQL数据类型 、

08:30------09:0009:00------12:00ftp服务器:172.40.50.117 7000软件 softpackage/mysql笔记 nsd1710/课程名称练习 homework 庞丽静 静静老师第四阶段:数据库管理 7天 DBA 安全与监控 6天 IDC监控集群与存储 5天+++++++++++++++++++++数据库管理:一 搭数据库服务器二 MySQL数据库服务的基本管理三 数据管理四 用户授权与权限撤销五 数据备份与恢复六 MySQL主从同步七 数据读写分离

MySQL数据类型与操作

内容提要: 建表完整语法规范(create table 表格(字段名1 类型 (宽度) 约束条件)) MySQL数据库数据类型(整型.浮点型.字符类型(char与varchar).日期类型.枚举与集合) 约束条件(primary key.unique key.not null.foreign key) --------------------------------------------------------------------------------------------------