【mysql】文本字符串类型
文章目录
- 文本字符串类型
- 1. CHAR与VARCHAR类型
- 2. 哪些情况使用 CHAR 或 VARCHAR 更好
- 3. TEXT类型
- 4. 开发中经验
文本字符串类型
在实际的项目中,经常遇到一种数据,就是字符串数据。
MySQL中,文本字符串总体上分为
CHAR
、VARCHAR
、TINYTEXT
、TEXT
、MEDIUMTEXT
、LONGTEXT
、ENUM
、SET
等类型。
1. CHAR与VARCHAR类型
CHAR和VARCHAR类型都可以存储比较短的字符串。
字符串(文本)类型 | 特点 | 长度 | 长度范围 | 占用的存储空间 |
---|---|---|---|---|
CHAR(M) | 固定长度 | M | 0 <= M <= 255 | M个字节 |
VARCHAR(M) | 可变长度 | M | 0 <= M <= 65535 | (实际长度 + 1) 个字节 |
CHAR类型:
- CHAR(M) 类型一般需要预先定义字符串长度。如果不指定(M),则表示长度默认是
1
个字符。 - 如果保存时,数据的实际长度比CHAR类型声明的长度小,则会在
右侧填充
空格以达到指定的长度。当MySQL检索CHAR类型的数据时,CHAR类型的字段会去除尾部的空格。 - 定义CHAR类型字段时,声明的字段长度即为CHAR类型字段所占的存储空间的字节数。
CREATE TABLE test_char1(
c1 CHAR,
c2 CHAR(5)
);DESC test_char1;
INSERT INTO test_char1
VALUES('a','Tom');
SELECT * FROM test_char1;
- CONCAT 函数时拼接两个字符串成一个字符串,测试数据的实际长度比CHAR类型声明的长度小,则会在右侧填充空格以达到指定的长度
SELECT CONCAT(c2,'***') FROM test_char1;
- 测试:当MySQL检索CHAR类型的数据时,CHAR类型的字段会去除尾部的空格。
INSERT INTO test_char1(c2)
VALUES('a ');SELECT CHAR_LENGTH(c2)
FROM test_char1;
VARCHAR类型:
VARCHAR(M)
定义时,必须指定
长度M
,否则报错。- MySQL4.0版本以下,varchar(20):指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) ;MySQL5.0版本以上,varchar(20):指的是20字符。
- 检索VARCHAR类型的字段数据时,会保留数据尾部的空格。VARCHAR类型的字段所占用的存储空间为字符串实际长度加1个字节。
CREATE TABLE test_varchar1(
NAME VARCHAR #错误
);
VARCHAR(M)
,M
最大 为21845
#Column length too big for column 'NAME' (max = 21845);
CREATE TABLE test_varchar2(
NAME VARCHAR(65535) #错误
);
- 一个汉字的长度就是一个字符的长度
CREATE TABLE test_varchar3(
NAME VARCHAR(5)
);INSERT INTO test_varchar3
VALUES('兮动人'),('云兮动人');
超出长度,就会报错
字母或数字的长度,也算一个字符的长度
CREATE TABLE test_varchar4(
name VARCHAR(6)
);INSERT INTO test_varchar4
VALUES('xdr630');
2. 哪些情况使用 CHAR 或 VARCHAR 更好
类型 | 特点 | 空间上 | 时间上 | 适用场景 |
---|---|---|---|---|
CHAR(M) | 固定长度 | 浪费存储空间 | 效率高 | 存储不大,速度要求高 |
VARCHAR(M) | 可变长度 | 节省存储空间 | 效率低 | 非CHAR的情况 |
情况1:存储很短的信息。比如门牌号码101,201……这样很短的信息应该用char
,因为varchar
还要占个byte用于存储信息长度,本来打算节约存储的,结果得不偿失。
情况2:固定长度的。比如使用uuid
作为主键,那用char
应该更合适。因为他固定长度,varchar
动态根据长度的特性就消失了,而且还要占个长度信息。
情况3:十分频繁改变的column
。因为varchar
每次存储都要有额外的计算,得到长度等工作,如果一个非常频繁改变的,那就要有很多的精力用于计算,而这些对于char
来说是不需要的。
情况4:具体存储引擎中的情况:
MyISAM
数据存储引擎和数据列:MyISAM数据表,最好使用固定长度(CHAR)的数据列代替可变长度(VARCHAR)的数据列。这样使得整个表静态化,从而使数据检索更快
,用空间换时间。MEMORY
存储引擎和数据列:MEMORY数据表目前都使用固定长度的数据行存储,因此无论使用CHAR或VARCHAR列都没有关系,两者都是作为CHAR类型处理的。InnoDB
存储引擎,建议使用VARCHAR类型。因为对于InnoDB数据表,内部的行存储格式并没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),而且主要影响性能的因素是数据行使用的存储总量,由于char平均占用的空间多于varchar,所以除了简短并且固定长度的,其他考虑varchar。这样节省空间,对磁盘I/O和数据存储总量比较好。
3. TEXT类型
在MySQL中,TEXT用来保存文本类型的字符串,总共包含4种类型,分别为TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT 类型。
在向TEXT类型的字段保存和查询数据时,系统自动按照实际长度存储,不需要预先定义长度。这一点和 VARCHAR类型相同。
每种TEXT类型保存的数据长度和所占用的存储空间不同,如下:
文本字符串类型 | 特点 | 长度 | 长度范围 | 占用的存储空间 |
---|---|---|---|---|
TINYTEXT | 小文本、可变长度 | L | 0 <= L <= 255 | L + 2 个字节 |
TEXT | 文本、可变长度 | L | 0 <= L <= 65535 | L + 2 个字节 |
MEDIUMTEXT | 中等文本、可变长度 | L | 0 <= L <= 16777215 | L + 3 个字节 |
LONGTEXT | 大文本、可变长度 | L | 0 <= L<= 4294967295(相当于4GB) | L + 4 个字节 |
- 由于实际存储的长度不确定,MySQL 不允许 TEXT 类型的字段做主键。遇到这种情况,你只能采用 CHAR(M),或者 VARCHAR(M)。
举例:
创建数据表:
CREATE TABLE test_text(
tx TEXT
);
INSERT INTO test_text
VALUES('atguigu ');
- 查询其长度
SELECT CHAR_LENGTH(tx)
FROM test_text;
- 说明在保存和查询数据时,并没有删除TEXT类型的数据尾部的空格。
4. 开发中经验
- TEXT文本类型,可以存比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议使用CHAR,VARCHAR来代替。还有TEXT类型不用加默认值,加了也没用。而且text和blob类型的数据删除后容易导致“空洞”,使得文件碎片比较多,所以频繁使用的表不建议包含TEXT类型字段,建议单独分出去,单独用一个表。
【mysql】文本字符串类型相关推荐
- MySQL学习(十七):数据类型之文本字符串类型
文本字符串类型 类型 值的长度 长度范围 占用的存储空间 CHAR(M) M 0<=M<=255 M个字节 VARCHAR(M) M 0<=M<=65535 实际长度+1个字节 ...
- MySQL数据库基础:数据类型详解-文本字符串类型
前言 正好趁着这次一起学习复习一下MySQL数据库的基本知识.也是一直在用这个数据库,有些基础的知识点长久不用就会遗忘,就比如数据类型溢出的问题,很多时候建表的时候随便给定个类似,结果导入数据的时候报 ...
- MySQL数据类型--------字符串类型实战
1. 背景 * MySQL支持的字符串类型有CHAR.VARCHAR.二进制.var二进制.BLOB.文本等等. 2. 字符串类型所需的存储和值范围 类型 说明 N的含义 是否有字符集 最大长度 CH ...
- MySQL中字符串类型的字段最大使用longtext来存储
在MySQL中存储字符串文本,我们一般会使用varchar类型.如果文本内容很多,那我们会使用text.但是记住,text并不是MySQL中存储文本信息最大的字段.如果您的项目中text还不够用,那么 ...
- mysql文本域类型_MySQL多个大文本域异常
最近散仙在处理标注结果入库的结果数据时,发现再向MySQL插入text域的文本值,莫名其妙的总是报一个异常,信息如下: java.sql.SQLException: Got error 139 fro ...
- Mysql 给字符串类型字段 加索引方法
前提 首先,mysql是支持前缀索引的,我们可以定义字符串的一部分作为索引. 必要性 如果你创建索引不指定前缀长度,则索引包含整个字符串,占用空间比较大, 如果我们使用好前缀索引,可以即节省空间又不会 ...
- mysql 转字符串类型
字段:number 是integer类型 在表test中 select cast(number as char) as number from test; 或者convert()方法.因为转换 ...
- Mysql在字符串类型的日期上加上10分钟并和如今的日期做比較
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ufo2910628/article/details/32092869 SELECT id FROM ...
- mysql数据库的字符串表示什么意思_MySQL数据库的字符串类型详解(01)
Mysql的数据类型主要分为三类:数字类型.字符串(字符)类型.日期和时间类型,由于时间紧迫,根据学习的需要 数字类型暂不做详解,等待有时间了在修改此文档,此文主要介绍mysql 数据类型中的字符串类 ...
- 不全?MySQL数据类型精讲,定点日期枚举文本字符串,json二进制,空间,选择建议,完整详细可收藏
文章目录 1. MySQL中的数据类型 2. 整数类型 3. 浮点数类型 4. 定点数类型 5. 位类型:BIT 6. 日期与时间类型 7. 文本字符串类型 8. ENUM类型 9. SET类型 10 ...
最新文章
- mustache语法 转自小花大方
- 看似简单但容易忽视的编程常识
- 【学习笔记】新基建/新动能——部分学习笔记
- c调用按钮点击事件_React中事件的写法总结
- 【laravel54】查看版本号3种方式
- 《Java 高并发》02 多线程的特性
- C#类类型“.NET技术”
- 伺服怎么接单相220伏_乐利网带你认识伺服电机及工作原理
- linux sh-3.2 怎么开机,linux 开机执行脚本文件
- 计算机信息数据集通信的概念,南京信息工程大学数据通信与计算机网络复习题库.doc...
- http://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html
- html如何在手机打开,HTML怎么在手机打开
- express-urlrewrite express url重写
- 请用html5标准完成以下页面布局(要求完整书写整个页面的html代码,不需要写CSS)
- Abbirb120型工业机器人_工控产品-ABB IRB120工业机器人-IRB120
- python解题时间_1小时还是30秒?Python给你的另一种数据处理选择
- good man or bad man?
- 9个最佳新闻聚合器网站(+如何构建自己的网站)
- 使用计算机数据采集的优点,什么是数据采集器
- java i18n utf_struts2.0乱码 在struts.xml里面设置struts.i18n.encoding=utf-8依然出现乱码是怎么回事呀...
热门文章
- 主控芯片成功案例:搭载北京君正X1000芯片,收款计算合二为一
- 全球与中国乳制品替代杏仁制品市场深度研究分析报告
- 微信代扣踩坑日记(微信自动续费)
- 互联网晚报 | 12月10日 星期五 | B站月均活跃UP主达270万人;宝马电动车总销量破百万;苹果市值逼近3万亿美元...
- 嵌入式 Linux下检索字符串命令grep
- python 处理excel公式_python 处理excel踩过的坑——data_only,公式全部丢失
- 哼唱也能识别歌名 音乐APP听歌识曲谁家强
- haxm device is not found
- 搜狗浏览器安装插件(.crx)
- 什么是电感器与电感?