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 ...
随机推荐
- [656] C4 Scions Of Destiny Opcodez
[656] C4 Scions Of Destiny Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 Request ...
- 苹果ios APP怎么打包?推荐这个网站
众所周知,苹果的应用开发需要基于苹果电脑环境,而我们很多开发者并不具备这样的条件.如果你买一台贵的苹果电脑只是为了发布一个应用,成本太高了! 就算你有苹果电脑,你也可以自己开发一个基于web的IOS应 ...
- keeplive 双击热备方案 (对haproxy负载均衡 )双击热备方案
1.安装 keepalived ,必选安装在haproxy 容器之内 1.进入容器:docker exec -it h1 bash 后执行下面步骤 1.更新apt-get apt-get upd ...
- [1] Multi-View Transformer for 3D Visual Grounding 论文精读
参考: https://zhuanlan.zhihu.com/p/467913475 3D Visual Grounding小白调研笔记 https://zhuanlan.zhihu.com/p/34 ...
- class_task
#!/usr/bin/python # -*- coding: UTF-8 -*- class Task(): _cls_name = "cls name" def ...
- img,video标签禁用鼠标右键功能
场景描述: 在网页中显示图片,当用户右键点击图片时,禁止用户右键操作. 这里会用到一个新属性,即 oncontextmenu. 例如: <img src="图片地址" cla ...
- IDEA中引入smarttomcat后控制台输出乱码,运行跳转到浏览器
解决乱码 这里只讲一种解决方法,其他方法,百度即可 1.打开Tomcat文件,找到配置文件config 2.在配置文件中找到logging.properties 3.修改文中含有encoding的语句 ...
- PyQt5弹框定时关闭(python)
PyQt5使用QMessageBox,可以设置在几秒后关闭 (作者使用的python3) info_box = QMessageBox()# 因为没使用这种方式 QMessageBox.inform ...
- Docker宿主机agetty进程cpu占用率100% 问题
参考 https://blog.51cto.com/u_15450131/4751959 systemctl stop getty@tty1.service systemctl mask getty ...
- Typora的初使用
HelloTypora 二级标题 三级标题 HelloWorld! HelloWorld HelloWorld HelloWorld HelloWorld HelloWorld 引用 分割线 图片 # ...