MySQL之char、varchar、text类型
在存储字符串时, 可以使用char、varchar或者text类型, 那么具体使用场景呢?
参考下面这个表结构:


分析
一,char类型
char列的长度固定为创建表时声明的长度。长度可以为从0到255的任何值。当保存char值时,在它们的右边填充空格以达到指定的长度。当检索到char值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。
二,varchar类型
varchar列中的值为可变长字符串。长度可以指定为0到65,535之间的值。(varchar的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。
三,text类型
有4种text类型:tinytext、text、mediumtext和longtext。这些对应4种blob类型,有相同的最大长度和存储需求。
blob 列被视为二进制字符串(字节字符串)。text列被视为非二进制字符串(字符字符串)。blob列没有字符集,并且排序和比较基于列值字节的数值值。text列有一个字符集,并且根据字符集的 校对规则对值进行排序和比较。
在text或blob列的存储或检索过程中,不存在大小写转换。
当未运行在严格模式时,如果你为blob或text列分配一个超过该列类型的最大长度的值值,值被截取以保证适合。如果截掉的字符不是空格,将会产生一条警告。使用严格sql模式,会产生错误,并且值将被拒绝而不是截取并给出警告。
在大多数方面,可以将blob列视为能够足够大的varbinary列。同样,可以将text列视为varchar列。blob和text在以下几个方面不同于varbinary和varchar:
当保存或检索blob和text列的值时不删除尾部空格。(这与varbinary和varchar列相同)。
请注意比较时将用空格对text进行扩充以适合比较的对象,正如char和varchar。
对于blob和text列的索引,必须指定索引前缀的长度。对于char和varchar,前缀长度是可选的。
blob和text列不能有 默认值。
long和long varchar对应mediumtext数据类型。这是为了保证兼容性。如果text列类型使用binary属性,将为列分配列字符集的二元 校对规则。
mysql连接程序/odbc将blob值定义为longvarbinary,将text值定义为longvarchar。
由于blob和text值可能会非常长,使用它们时可能遇到一些约束:
当排序时只使用该列的前max_sort_length个字节。
max_sort_length的 默认值是1024;该值可以在启动mysqld服务器时使用--max_sort_length选项进行更改。参见5.3.3节,“服务器系统变量”。
运行时增加max_sort_length的值可以在排序或组合时使更多的字节有意义。任何客户端可以更改其会话max_sort_length变量的值:
复制代码 代码示例:
mysql> set max_sort_length = 2000;mysql> select id, comment from tbl_name -> order by comment;
当要使超过max_sort_length的字节有意义,对含长值的blob或text列使用group by或order by的另一种方式是将列值转换为固定长度的对象。标准方法是使用substring函数。例如,下面的语句对comment列的2000个字节进行排序:
复制代码 代码示例:
mysql> select id, substring(comment,1,2000) from tbl_name -> order by substring(comment,1,2000);·
blob或text对象的最大大小由其类型确定,但在客户端和服务器之间实际可以传递的最大值由可用内存数量和通信缓存区大小确定。你可以通过更改max_allowed_packet变量的值更改消息缓存区的大小,但必须同时修改服务器和客户端程序。例如,可以使用 mysql和mysqldump来更改客户端的max_allowed_packet值。
每个blob或text值分别由内部分配的对象表示。这与其它列类型形成对比,后者是当打开表时为每1列分配存储引擎。
以上就是mysql中text|varchar|char字段类型的用法区别,希望对大家有所帮助。
总结:
1、 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。
2、 varchar可变长度,可以设置最大长度;适合用在长度可变的属性。
3、 text不设置长度, 当不知道属性的最大长度时,适合用text。
按照查询速度: char最快, varchar次之,text最慢。
鸣谢:
https://blog.csdn.net/weixin_39790686/article/details/113111391
https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html
MySQL之char、varchar、text类型的更多相关文章
- mysql的char,varchar,text,blob
mysql的char,varchar,text,blob是几个有联系但是有有很大区别的字段类型,这算是mysql的基础吧,可是基础没有学好,恶补一下. 先简单的总结一下: char:定长,最大255个 ...
- mysql中char,varchar,text
1.char char最大长度是255字符,注意是字符数和字符集没关系. 1)可以有默认值, 2)尾部有空格会被截断 3)不管汉字.英文,还是其他编码,都可以存255字符 2.varchar 1)va ...
- mysql中char,varchar,text区别总结
具体对这三种类型的说明不做阐述可以查看mysql帮助文档. char的总结: char最大长度是255字符,注意是字符数和字符集没关系.可以有默认值,尾部有空格会被截断.varchar的总结 ...
- mysql列类型char,varchar,text,tinytext,mediumtext,longtext的比较与选择
储存不区分大小写的字符数据 TINYTEXT 最大长度是 255 (2^8 – 1) 个字符. TEXT 最大长度是 65535 (2^16 – 1) 个字符. MEDIUMTEXT 最大长度是 16 ...
- 着重基础之—MySql Blob类型和Text类型
着重基础之—MySql Blob类型和Text类型 在经历了几个Java项目后,遇到了一些问题,在解决问题中体会到基础需要不断的回顾与巩固. 最近做的项目中,提供给接口调用方数据同步接口,传输的数据格 ...
- [Android Pro] sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别
reference : http://blog.csdn.net/xingfeng0501/article/details/7817121 1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索 ...
- sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别
1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充. 2.VAR ...
- sqlite数据库的char,varchar,text,nchar,nvarchar,ntext的区别(转)
sqlite数据库存储table1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不 ...
- mybatis 处理 mysql 表中的 text类型的 字段
在mysql 中 text类型的字段: service_detail text NULL 服务描述 . 对应java文件中 model 中的 String: private String ser ...
- 【Mysql】Mysql Json类型或Text类型可以建索引吗?
一.JSON类型 答案是不可以 为Json类型建索引会报错 mysql)); ERROR (): JSON column 'card_pay_data' cannot be used in key s ...
随机推荐
- 1. ansible学习总结: 基础模块
copy模块: #传输文件到目标机 ansible -i /kingdee/ansible/host all -m copy -a 'src=/tmp/aaaa.tgz dest=/tmp/aaaa. ...
- CSP202104-4校门外的树
`#include include include include include include include include include include include include us ...
- WPF 使用Path(自定义控件,圆形进度条)
原文:https://www.cnblogs.com/tsliwei/p/5609035.html 原文链接:https://blog.csdn.net/johnsuna/article/detail ...
- (原创)odoo计算字段报CacheMiss异常
在odoo计算字段获取值的中的过程中报出odoo.exceptions.CacheMiss异常,常见的原因为是在计算字段方法中没有为该计算字段赋值.如图 方法"_compute_test&q ...
- ubuntu 的 apt 命令
工作原理 apt 全称 advanced packaging tool 是 ubuntu 下的包管理工具 apt 采用集中式仓储机制来管理软件,有 软件安装包 和 软件安装列表 两部分完成. 使用 a ...
- Linux_CMD_FOR_FILE&FOLDER
0,删除文件夹和子文件夹:rm -rf /xxx/xxx 0,拷贝整个文件夹:cp -r /xxx/xxx /ddd/ 0,改文件名:mv oldName newName 0,新建文件:touch f ...
- Eclipse 获取maven项目出现问题汇总
1.errors occurred during the build,可以试试加上下图的配置,路径根据自己jak安装路径去修改
- unity VideoPlayer 视频静音
standVideo.SetDirectAudioMute(0,true);
- 富文本 HTML String 转化为 nodes 数组
https://github.com/ant-mini-program/mini-html-parser?spm=ding_open_doc.document.0.0.4ef9722fXz27PV
- zookeeper 选举流程源码解析
在开始之前,我们先了解一下zookeeper集群角色,zookeeper中存在leader,follower, observer这么几个角色, leader, follower, 就类似与mysql ...