首页 > 数据库 >MySQL之char、varchar、text类型

MySQL之char、varchar、text类型

时间:2022-08-22 17:45:07浏览次数:214  
标签:varchar text char blob max 长度

    在存储字符串时, 可以使用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 

标签:varchar,text,char,blob,max,长度
From: https://www.cnblogs.com/yakniu/p/16613649.html

相关文章

  • manjaro clion/pycharm 快捷方式
    步骤差不多,1.首先下载>>https://www.jetbrains.com.cn/pycharm/download/download-thanks.html?platform=linux2.解压到一个文件夹, 我在work目录下建了一个applicti......
  • 5种方式获取ApplicationContext
    第一种直接注入@ResourceprivateApplicationContextctx; 第二种实现ApplicationContextAware接口创建一个实体类并实现ApplicationContextAware接口,重写接口内的se......
  • /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `
    原因:C语言的头文件不够错误代码:未导入#include<stdlib.h>报错#include<stdio.h>#defineR1intmain(){floatc,r,s;c=2;#ifRr=3.14*c*c;printf......
  • vue 引入echars 亲测版
    网上找了很多例子,其中有修改main.js的配置的,反正我没搞成功,最后实验成功的步骤如下 1、首先创建一个VueCLI的工程。   注:具体步骤查看以前的博客https://www.c......
  • ServletContextListener使用
    ServletContextListener使用步骤:1,定义一个类,实现servletcontextListener接口2。复写方法3。配置1.web.xml<klistener><listener......
  • Anaconda, PyTorch, CUDA Driver, PyCharm 安装与配置
    1安装Anaconda(2022.05)最新版本https://www.anaconda.com/历史版本https://repo.anaconda.com/archive/打开安装包:nextIAgreeJustMe(影响之后创建虚拟环境的......
  • Python自学教程1-安装pycharm和执行环境
    Python虽然简单,但是很多没有接触过的学起来还是比较困难的。因此很多人会报班去学,我觉得不需要花那个钱,只要方向正确,加上核心知识点的提炼,自学一个月左右就能上手。我尝试......
  • train.py文件在pycharm中输入参数命令的方法
    保姆式yolov5教程,训练你自己的数据集-知乎(zhihu.com)点击train->EditConfigurations: 在Parameters,输入对应参数命令--weightsyolov5s.pt--datadata/fire.......
  • 【Azure 事件中心】Event Hub 消费端出现 Timeout Exception,errorContext中 LINK_CRE
    问题描述在使用EventHubSDK消费数据过程中,出现大量的TimeoutException,详细消息为:com.microsoft.azure.eventhubs.TimeoutException:Entity(xxxxxx):Sendoperation......
  • Typora最强替代神器Marktext
    目录官方简介安装使用配置图床HTTP调用上传具体路径图片采坑事项自从Typora收费之后,我一直都在寻找新的markdown替代工具,最终选择了marktext,其开源免费(将白嫖遵旨贯彻到......