数据库-列的类型-字符串Text类型

类型 最大长度 实际存储空间 描述
TINYTEXT 255 字节 1 字节 + 数据长度 用于存储短的字符串
TEXT 65,535 字节 (2^16 - 1) 2 字节 + 数据长度 通常用于中等长度的字符串
MEDIUMTEXT 16,777,215 字节 (2^24 - 1) 3 字节 + 数据长度 用于存储中等长度的字符串
LONGTEXT 4,294,967,295 字节 (2^32 - 1) 4 字节 + 数据长度 用于存储长文本数据

#Text 字符串类型
create database StringTextStudy;
use StringTextStudy;
#创建表
create table TextTypes(t_text tinytext,Varch varchar(255));

#插入数据
insert into textTypes values('玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!','玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!');

select *from texttypes;
#插入数据 插入拼接10个‘玩原神玩的!’一共是180字节 这是t_text tinytext字段   插入拼接10个‘玩原神玩的!’一共是60个字 这是Varch varchar(255)


insert into textTypes values('玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!','玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!');
/*
insert into textTypes values('玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩
的!玩原神玩的!玩原神玩的!','玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!玩原神玩的!');
ERROR 1406 (22001): Data too long for column 't_text' at row 1 
???
16个拼接‘玩原神玩的!’ 已经超出了tinytext的255个字节所以 error数据太长  

玩原神玩的!是编码造成的拼接16个’玩原神玩的!‘>255个字节   所以到底 一个汉字在MySQL里算几个字节? 或者说用什么编码 存放汉字
*/
#查看创建表 的结构
show create table TextTypes;
/*
+-----------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                           |
+-----------+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| TextTypes | CREATE TABLE `texttypes` (
  `t_text` tinytext,
  `Varch` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-----------+--------------------------------------------------------------------------------------------------------------------------------------------------------+

DEFAULT CHARSET=utf8mb4 默认字符编码 utf-8 编码 所以一个汉字三个字节 
所以’玩原神玩的!’这句汉字有3*6=18个字节  后面拼接十五个汉字 就是18*16=288个字节数远远地错过了tinytext的存储范围 无论是text的其他的文本类型 都会有字节 超出插入失败 
所以 tinytext以及其他的文本类型 存储都是字节 varchar是字符数量 当然varchar类型需要*3实际存储时扩大 
虽然varchar能够存储 时就是按照编码 存储字符个数  虽然存放定义的255字符个数 但字符个数不等于对应的编码需要的空间  表面上是存放255个字符数 实际上还得按照编码扩大字节数
这句话啥意思 也就是 :我虽然给你放中文的个数是255个但我实际 字节数给你×3 搞大你的实际存储的字节 当然也能看得出来,因为在MySQL里也没必要这么多的中文存储 65535/3 才是存储中文最多个数
*/
# 接下来插入的是名场面我是神里绫华的狗 哈哈哈
insert into  TextTypes values('我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里','我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!');

你可能感兴趣的:(数据库)