文章目录

  • 第1章 测试环境说明及准备
  • 第2章 字符串数据类型char
    • 2.1 char的总结
    • 2.2 char的最大长度
    • 2.3 char的基本理解
    • 2.4 char的定长理解
  • 第3章 字符串数据类型varchar
    • 3.1 varchar的总结
    • 3.2 varchar的最大长度
    • 3.3 varchar的基本理解
    • 3.4 varchar的变长理解

第1章 测试环境说明及准备

#####  数据库版本和默认的存储引擎
mysql> select @@version,@@default_storage_engine;
+------------+--------------------------+
| @@version  | @@default_storage_engine |
+------------+--------------------------+
| 5.7.28-log | InnoDB                   |
+------------+--------------------------+
1 row in set (0.00 sec)#####  事务的提交方式是自动的(主要是针对DML语句)
mysql> select @@autocommit,@@global.autocommit;
+--------------+---------------------+
| @@autocommit | @@global.autocommit |
+--------------+---------------------+
|            1 |                   1 |
+--------------+---------------------+
1 row in set (0.00 sec)#####  创建chenliang库,并进入到chenliang库下面
mysql> create database if not exists chenliang character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.03 sec)mysql> show databases like "chenliang";
+----------------------+
| Database (chenliang) |
+----------------------+
| chenliang            |
+----------------------+
1 row in set (0.03 sec)mysql> use chenliang;
Database changedmysql> select database();
+------------+
| database() |
+------------+
| chenliang  |
+------------+
1 row in set (0.01 sec)

第2章 字符串数据类型char

2.1 char的总结

类型 格式 最大长度 例:char(4)
char char(m) m最大可指定255 只能存放由4个字符组成的字符串

2.2 char的最大长度

char()可以指定的最大长度是255, 这个不用管表的字符集是什么,以下展示的是当char()指定的长度超过255现现的问题(不用管sql_mode是否包不包含严格(strict_trans_tables)模式)

2.3 char的基本理解

主要理解char(M)中的M表示可以存放的字符个数,并不代表字节数;

sql_mode开启了严格模式,即包含strict_trans_tables变量

##### 设置当前会话模式下sql_mode包含严格模式
set session sql_mode="strict_trans_tables";
select @@sql_mode;##### 创建test23_1表
create table if not exists test23_1(name char(4)
)engine=innodb character set utf8 collate utf8_general_ci;#### 插入测试数据
insert into test23_1(name) values("陈");            -- ok
insert into test23_1(name) values("陈陈");          -- ok
insert into test23_1(name) values("陈陈陈");        -- ok
insert into test23_1(name) values("陈陈陈陈");      -- ok
insert into test23_1(name) values("陈陈陈陈陈");    -- error,因为sql_mode开启了严格模式#### 查询表中的数据
select * from test23_1;

sql_mode未开启严格模式,即不包含strict_trans_tables变量

##### 设置当前会话模式下sql_mode包含严格模式
set session sql_mode="";
select @@sql_mode;##### 创建test23_2表
create table if not exists test23_2(name char(4)
)engine=innodb character set utf8 collate utf8_general_ci;#### 插入测试数据
insert into test23_2(name) values("陈");        -- ok
insert into test23_2(name) values("陈陈");       -- ok
insert into test23_2(name) values("陈陈陈");     -- ok
insert into test23_2(name) values("陈陈陈陈");   -- ok
insert into test23_2(name) values("陈陈陈陈陈"); -- 成功且有警告,因sql_mode未严格模式,到表中的数据是"陈陈陈陈"#### 查询表中的数据
select * from test23_2;

2.4 char的定长理解

value 你看到的字符个数 char(4) 存储
“” 0 按4个字符来存("    ") 4bytes[按4个英文字符来存储]
“a” 1 按4个字符来存("a   ") 4bytes[按4个英文字符来存储]
“ab” 2 按4个字符来存("ab  ") 4bytes[按4个英文字符来存储]
“abc” 3 按4个字符来存("abc ") 4bytes[按4个英文字符来存储]
“abcd” 4 按4个字符来存(“abcd”) 4bytes[按4个英文字符来存储]
"AA " 2 按4个字符来存("AA  ") 4bytes[按4个英文字符来存储]
" BB" 3 按4个字符来存(" BB  ") 4bytes[按4个英文字符来存储]
##### 创建test24表,name字段的数据类型为char(4)且不能为空
create table if not exists test24(name char(4)
)engine=innodb character set utf8 collate utf8_general_ci;##### 插入数据几条数据
-- 第一阶段插入的数据
insert into test24(name) values("");      # 没有插入任何字符
insert into test24(name) values("a");     # 数据:"a"
insert into test24(name) values("ab");    # 数据:"aa"
insert into test24(name) values("abc");   # 数据:"abc"
insert into test24(name) values("abcd");  # 数据:"abcd"-- 第二阶段插入的数据
insert into test24(name) values("AA ");   # 数据:"AA "-- 第三阶段插入的数据
insert into test24(name) values(" BB");   # 数据:" BB"###### 查看插入的字符有多少个
-- 用char_length函数查看表中每条记录中name字段中的字符个数
mysql> select name,char_length(name) from test24;
+------+-------------------+
| name | char_length(name) |
+------+-------------------+
|      |                 0 |
| a    |                 1 |
| ab   |                 2 |
| abc  |                 3 |
| abcd |                 4 |
| AA   |                 2 |  <== 这条记录时,插入的是"两个A和一个空格",可看到的只有2个字符
|  BB  |                 3 |
+------+-------------------+
7 rows in set (0.00 sec)-- 修改sql_mode包含PAD_CHAR_TO_FULL_LENGTH变量
mysql> set session sql_mode="STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH";
Query OK, 0 rows affected, 2 warnings (0.00 sec)-- 再次查看表中每条记录中name字段中的字符个数
mysql> select name,char_length(name) from test24;
+------+-------------------+
| name | char_length(name) |
+------+-------------------+
|      |                 4 |
| a    |                 4 |
| ab   |                 4 |
| abc  |                 4 |
| abcd |                 4 |
| AA   |                 4 |
|  BB  |                 4 |
+------+-------------------+
7 rows in set (0.00 sec)##### 查看表中每条记录中name字段占用的存储大小
mysql> select name,length(name) from test24;
+------+--------------+
| name | length(name) |
+------+--------------+
|      |            4 |
| a    |            4 |
| ab   |            4 |
| abc  |            4 |
| abcd |            4 |
| AA   |            4 |
|  BB  |            4 |
+------+--------------+
7 rows in set (0.00 sec)

第3章 字符串数据类型varchar

3.1 varchar的总结

3.2 varchar的最大长度

varchar的存储限制是65535个字节(bytes)【1个英文字符占用1个字节,1个中文字符占用多少字节就要看”字符集了】;
varchar可以存放多少个字符呢(这里把中文字符也考虑进去);

gbk字符集:    1个中文字符占用2字节(bytes)
utf8字符集:   1个中文字符占用3字节(bytes)
utf8mbc字符集:1个中文字符占用4字节(bytes)

当varchar存放的"字符串"的字符数不超过255个时,会占用1个字节来进行记录字符串的长度;
当varchar存放的“字符串”的字符数已超过255个时,会占用2个字节来进行记录字符串的长度;
所以varchar在不同字符集的情况下最多可以存放的字符数如下所示:

gbk字符集:     65535 / 2 -2      等于 32765
utf8字符集:   65535 / 3 - 2     等于 21843
utf8mb4字符集:65535 / 4 - 2     等于 16381



3.3 varchar的基本理解

主要理解varchar(M)中的M表示可以存放的字符个数,并不代表字节数;

sql_mode开启了严格模式,即包含strict_trans_tables变量

##### 设置当前会话模式下sql_mode包含严格模式
set session sql_mode="strict_trans_tables";
select @@sql_mode;##### 创建test33_1表
create table if not exists test33_1(name varchar(4)
)engine=innodb character set utf8 collate utf8_general_ci;#### 插入测试数据
insert into test33_1(name) values("陈");            -- ok
insert into test33_1(name) values("陈陈");          -- ok
insert into test33_1(name) values("陈陈陈");        -- ok
insert into test33_1(name) values("陈陈陈陈");      -- ok
insert into test33_1(name) values("陈陈陈陈陈");    -- error,因为sql_mode开启了严格模式#### 查询表中的数据
select * from test33_1;

sql_mode未开启严格模式,即不包含strict_trans_tables变量

##### 设置当前会话模式下sql_mode包含严格模式
set session sql_mode="";
select @@sql_mode;##### 创建test33_2表
create table if not exists test33_2(name varchar(4)
)engine=innodb character set utf8 collate utf8_general_ci;#### 插入测试数据
insert into test33_2(name) values("陈");        -- ok
insert into test33_2(name) values("陈陈");       -- ok
insert into test33_2(name) values("陈陈陈");     -- ok
insert into test33_2(name) values("陈陈陈陈");   -- ok
insert into test33_2(name) values("陈陈陈陈陈"); -- 成功且有警告,因sql_mode未严格模式,到表中的数据是"陈陈陈陈"#### 查询表中的数据
select * from test33_2;

3.4 varchar的变长理解

MySQL字符串数据类型相关推荐

  1. mysql布尔数据类型_MySQL数据类型

    在本教程中,您将了解MySQL数据类型以及如何在MySQL中设计数据库时有效地使用它们. 数据库表包含具有特定数据类型(如数字或字符串)的多个列. MySQL提供更多的数据类型,而不仅仅是数字或字符串 ...

  2. 字符串不替代_【数据挖掘】MySQL中的字符串数据类型

    首先我们需要知道,MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串类型. 01 数值类型 包含所有标准SQL支持的数值数据类型. 02 日期和时间类型 03 字符串类型 binary ...

  3. mysql字符串不等于怎么优化_MySQL 数据类型优化(二:字符串) | 剑花烟雨江南...

    MySQL 支持多种字符串类型,每种类型还有很多变化. VARCHAR 和 CHAR 类型 VARCHAR 和 CHAR 是两种最主要的字符串类型.不幸的是,很难解释这些值是怎么存储在磁盘和内存中的, ...

  4. 解决Data too long for column ‘xxx‘ at row 1问题以及深入理解mysql的字符串数据类型(char,varchar,enum,text,longtext...)

    文章目录 1. 复现问题 2. 分析问题 3. 深入理解mysql的数据类型 3.1 CHAR 和 VARCHAR 类型 3.2 TEXT 类型 3.3 ENUM 类型 3.4 SET 类型 4. 解 ...

  5. mysql常用数据类型的属性有哪些_MySQL数据类型和常用字段属性总结

    日期和时间数据类型 date 3字节,日期,格式:2014-09-18 time 3字节,时间,格式:08:42:30datetime 8字节,日期时间,格式:2014-09-18 08:42:30t ...

  6. 再谈MySQL JSON数据类型

    2019独角兽企业重金招聘Python工程师标准>>> 本文首发微信公众号<andyqian>.期待你的关注- 前言 眨眼间,有一小段时间没有更新文章了.唉,又懒了... ...

  7. MySQL 字段数据类型/长度

    分类: 数据库学习2010-09-27 16:30 105人阅读 评论(0) 收藏 举报 一.MySQL 字段数据类型/长度 1.数值类型 列类型              需要的存储量 TINYIN ...

  8. mysql 字符串大小写_Mysql 字符串类型及大小写

    MySQL字符串类型有varchar和char类型,这两者区别很多人都知道,我经常搞混..   所以这里记一下: varchar类型是可变长度: 适合存储长度不一致的数据类型: char类型是固定长度 ...

  9. MySQL日期数据类型、时间类型使用总结

    转载链接:http://www.jb51.net/article/23966.htm MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ----- ...

  10. mysql 变量 数据类型_浅谈mysql(二)数据类型

    //我...我才是不是傲娇呢 //如有问题还请多多指教.上回我们说到我们如何使用MySQL,关键是要看它的用途.用途衍生语句.之后文章的思路,也是如此,从用途出发,然后再到语句. 那么,我们先问几个问 ...

最新文章

  1. smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty。...
  2. 5000并发的qps是多少_高并发初体验记录-02
  3. Java课程设计——坦克大战
  4. 全球及中国太阳能硅片产业供需走势及投资建设前景分析报告2021-2027年
  5. 判断大小简单算法_优化 | 贪婪算法有多好?Submodularity告诉你
  6. C# 使用Conditional特性而不是#if条件编译
  7. IDEA 调试部署 Web-INF/classes下面不生成class文件
  8. Java语音怎么输出翼型_] 靠增大翼型弯度来获得升力增加的操纵面是什么?
  9. Observer模式(观察者设计模式)
  10. Delphi7串口通讯实例(含Spcomm控件)
  11. SpringBoot系列之集成EasyExcel导入合并行数据
  12. 街头篮球手游服务器维护,街头篮球手游2017.6.22维护更新公告 宝箱位置调整更新一览...
  13. [XMAN2018排位赛]ppap
  14. qiime2 学习 测序公司返回合并后的数据后续处理
  15. 示波器 DC50Ω与DC1M
  16. [ASP.NET]web实现用FTP上传、下载文件(附源码)
  17. 如何把源代码格式复制到WPS文档中
  18. UBUNTU 18.04 GPU + miniconda3 + pytorch + yolo v5 安装测试
  19. 一款轻量级的markdown编辑器
  20. 概率论的学习和整理13--方差和协方差(未完成)

热门文章

  1. 六级考研单词之路-四
  2. 关闭 C4996 警告(_CRT_SECURE_NO_DEPRECATE)方法
  3. java课程综合实训报告_Java ME综合实训报告
  4. 年仅31岁!90后协和博士、医学考研名师刘不言意外离世
  5. 计算机编程导论python程序设计答案-计算机科学与Python编程导论_学堂云答案
  6. 打开 igv java_【2019-04-23】 IGV打不开的处理办法
  7. linux运行ktr文件,Linux下用命令來執行kettle文件資源庫的文件ktr與kjb的方法
  8. android studio调用so方法,android studio中的so库调用
  9. 使用git push没有报错,但是远程仓库没有更新的问题
  10. 组合按键的软件设计(c语言)