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

类型最大长度实际存储空间描述
TINYTEXT255 字节1 字节 + 数据长度用于存储短的字符串
TEXT65,535 字节 (2^16 - 1)2 字节 + 数据长度通常用于中等长度的字符串
MEDIUMTEXT16,777,215 字节 (2^24 - 1)3 字节 + 数据长度用于存储中等长度的字符串
LONGTEXT4,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 才是存储中文最多个数
*/
# 接下来插入的是名场面我是神里绫华的狗 哈哈哈

#  再创建一个表
create table TextTypes1(t_text tinytext,Varch varchar(100));
# 插入以字节为首的中文插入了255个字节  和100个中文字符 MySQL按照utff-8编码 对varchar 中文字符来计算 300个字节
insert into  TextTypes1 values('我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!神里绫华','我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!!');

# 插入失败超出字符个数 

insert into  TextTypes1 values('我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!神里绫华','我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!!');
create table TextTypes1(t_text tinytext,Varch varchar(100));
# 插入以字节为首的中文插入了255个字节  和100个中文字符 MySQL按照utff-8编码 对varchar 中文字符来计算 300个字节
insert into  TextTypes1 values('我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!神里绫华','我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!!');

insert into  TextTypes1 values('我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!神里绫华','我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!我是神里绫华的狗!!');
# error  Data too long for column 'Varch' at row 1

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小森程序员

若能帮助到你,小费自愿付费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值