MySQL字符串数据类型
文章目录
- 第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字符串数据类型相关推荐
- mysql布尔数据类型_MySQL数据类型
在本教程中,您将了解MySQL数据类型以及如何在MySQL中设计数据库时有效地使用它们. 数据库表包含具有特定数据类型(如数字或字符串)的多个列. MySQL提供更多的数据类型,而不仅仅是数字或字符串 ...
- 字符串不替代_【数据挖掘】MySQL中的字符串数据类型
首先我们需要知道,MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串类型. 01 数值类型 包含所有标准SQL支持的数值数据类型. 02 日期和时间类型 03 字符串类型 binary ...
- mysql字符串不等于怎么优化_MySQL 数据类型优化(二:字符串) | 剑花烟雨江南...
MySQL 支持多种字符串类型,每种类型还有很多变化. VARCHAR 和 CHAR 类型 VARCHAR 和 CHAR 是两种最主要的字符串类型.不幸的是,很难解释这些值是怎么存储在磁盘和内存中的, ...
- 解决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. 解 ...
- mysql常用数据类型的属性有哪些_MySQL数据类型和常用字段属性总结
日期和时间数据类型 date 3字节,日期,格式:2014-09-18 time 3字节,时间,格式:08:42:30datetime 8字节,日期时间,格式:2014-09-18 08:42:30t ...
- 再谈MySQL JSON数据类型
2019独角兽企业重金招聘Python工程师标准>>> 本文首发微信公众号<andyqian>.期待你的关注- 前言 眨眼间,有一小段时间没有更新文章了.唉,又懒了... ...
- MySQL 字段数据类型/长度
分类: 数据库学习2010-09-27 16:30 105人阅读 评论(0) 收藏 举报 一.MySQL 字段数据类型/长度 1.数值类型 列类型 需要的存储量 TINYIN ...
- mysql 字符串大小写_Mysql 字符串类型及大小写
MySQL字符串类型有varchar和char类型,这两者区别很多人都知道,我经常搞混.. 所以这里记一下: varchar类型是可变长度: 适合存储长度不一致的数据类型: char类型是固定长度 ...
- MySQL日期数据类型、时间类型使用总结
转载链接:http://www.jb51.net/article/23966.htm MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 ----- ...
- mysql 变量 数据类型_浅谈mysql(二)数据类型
//我...我才是不是傲娇呢 //如有问题还请多多指教.上回我们说到我们如何使用MySQL,关键是要看它的用途.用途衍生语句.之后文章的思路,也是如此,从用途出发,然后再到语句. 那么,我们先问几个问 ...
最新文章
- smarty_modifier_truncate,无或者有md_substr的情况下都能正确截取字符串的php函数,可用于smarty。...
- 5000并发的qps是多少_高并发初体验记录-02
- Java课程设计——坦克大战
- 全球及中国太阳能硅片产业供需走势及投资建设前景分析报告2021-2027年
- 判断大小简单算法_优化 | 贪婪算法有多好?Submodularity告诉你
- C# 使用Conditional特性而不是#if条件编译
- IDEA 调试部署 Web-INF/classes下面不生成class文件
- Java语音怎么输出翼型_] 靠增大翼型弯度来获得升力增加的操纵面是什么?
- Observer模式(观察者设计模式)
- Delphi7串口通讯实例(含Spcomm控件)
- SpringBoot系列之集成EasyExcel导入合并行数据
- 街头篮球手游服务器维护,街头篮球手游2017.6.22维护更新公告 宝箱位置调整更新一览...
- [XMAN2018排位赛]ppap
- qiime2 学习 测序公司返回合并后的数据后续处理
- 示波器 DC50Ω与DC1M
- [ASP.NET]web实现用FTP上传、下载文件(附源码)
- 如何把源代码格式复制到WPS文档中
- UBUNTU 18.04 GPU + miniconda3 + pytorch + yolo v5 安装测试
- 一款轻量级的markdown编辑器
- 概率论的学习和整理13--方差和协方差(未完成)
热门文章
- 六级考研单词之路-四
- 关闭 C4996 警告(_CRT_SECURE_NO_DEPRECATE)方法
- java课程综合实训报告_Java ME综合实训报告
- 年仅31岁!90后协和博士、医学考研名师刘不言意外离世
- 计算机编程导论python程序设计答案-计算机科学与Python编程导论_学堂云答案
- 打开 igv java_【2019-04-23】 IGV打不开的处理办法
- linux运行ktr文件,Linux下用命令來執行kettle文件資源庫的文件ktr與kjb的方法
- android studio调用so方法,android studio中的so库调用
- 使用git push没有报错,但是远程仓库没有更新的问题
- 组合按键的软件设计(c语言)