证明char是定长的?

证明char是定长的?

大部分博客都在讲解char和varchar区别的时候都谈到char为定长,varchar为变长。

但是怎么证明char为定长呢?

下面是我证明的过程。

  1. 创建CHAR列:首先,创建一个CHAR列,指定其长度。例如:

    CREATE TABLE char_test (id INT,name CHAR(10)
    );
    

    在上面的示例中,name列被定义为CHAR(10),表示它将始终占用10个字符的空间。

  2. 插入不同长度的数据:接下来,插入不同长度的数据,并检查存储占用的空间。例如:

    INSERT INTO char_test (id, name) VALUES (1, 'John');
    INSERT INTO char_test (id, name) VALUES (2, 'Alice');
    
  3. 查看存储空间:使用以下SQL语句来查看存储空间的使用情况:

    SELECT id, name, LENGTH(name) AS actual_length FROM char_test;
    

    上述查询将返回:

    +----+----------+---------------+
    | id | name     | actual_length |
    +----+----------+---------------+
    | 1  | John     | 4            |
    | 2  | Alice    | 5            |
    +----+----------+---------------+
    

证明翻车!!!

为什么呢?为什么查询出来的长度不是10呢?

有点出乎笔者的意料。

这个时候我想到的是chatgpt。

在这里插入图片描述

我差点就相信它了!!但是我问它出处的时候?它又“人工智障”了。

在这里插入图片描述

这个时候我想到了MySQL官网找寻答案。

下面链接有详细char的介绍。

MySQL :: MySQL 8.0 Reference Manual :: 11.3.2 The CHAR and VARCHAR Types

在这里插入图片描述

重点来了。。。

当char的值在检索(查询)的时候,右边的填充空格被移除了

那怎么办呢?后面不是给了一个SQL mode吗?修改SQL mode干一把。

mysql> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode                                 |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set (0.00 sec)

设置PAD_CHAR_TO_FULL_LENGTH模式。

mysql> SET sql_mode = 'PAD_CHAR_TO_FULL_LENGTH';
Query OK, 0 rows affected, 1 warning (0.00 sec)

在查询char类型字段的长度。

mysql> SELECT id, name, CHAR_LENGTH(name) AS character_length, LENGTH(name) AS byte_length FROM char_test;
+------+------------+------------------+-------------+
| id   | name       | character_length | byte_length |
+------+------------+------------------+-------------+
|    1 | John       |               10 |          10 |
|    2 | Alice      |               10 |          10 |
+------+------------+------------------+-------------+
2 rows in set (0.00 sec)

至此,终于是把char为定长证明出来了。

最后得出结论:
CHAR确实是定长的。
CHAR 在存储时会在右边填充空格以达到指定的长度,检索(查询)时会去掉空格。在PAD_CHAR_TO_FULL_LENGTH模式下会显示出空格。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

凯撒密码实现

凯撒密码(Caesar Cipher)是一种古老的替代加密技术,也称为移位密码。它是一种单字母替代密码,其中每个字母在字母表中向前或向后移动一个固定数量的位置来加密文本。这个固定的移动数量被称为偏移量或密钥。这里是一个Python示例&…

10kb的照片尺寸怎么弄?三个方法值得一试!

为了方便存储和传输,同时还能保证一定的清晰度。10kb的照片在清晰度和尺寸之间达到了平衡,既能保证照片的细节和色彩,又不会占用太多的存储空间。那么如何把照片弄成10kb呢?下面介绍了三种方法。 方法一:嗨格式压缩大师…

docker运行镜像相关配置文件

Dockerfile 文件配置 FROM anapsix/alpine-java:8_server-jre_unlimitedMAINTAINER Lion LiRUN mkdir -p /data/sydatasource/logs \/data/sydatasource/temp \/data/skywalking/agentWORKDIR /data/sydatasourceENV SERVER_PORT8220EXPOSE ${SERVER_PORT}ENV TZAsia/Shanghai …

GZ035 5G组网与运维赛题第10套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项(高职组) 赛题第10套 一、竞赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通(35分) 子任务1:5G公共网络部署与调试(15分) 子…

Spring Cloud之Sentinel的简单学习

目录 雪崩问题 超时处理 线程隔离 熔断降级 流量控制 服务对比 安装Sentinel控制台 案例 簇点链路 限流规则 流控模式 直接模式 关联模式 链路模式 流控效果 Warm up 排队等待 热点参数限流 隔离与降级 Feign整合Sentinel 线程隔离 规则设置 熔断降级 …

RK3568外部IO中断示例

外部IO中断介绍 本篇文章以万象奥科HD-RK3568-IOT评估板中GPIO30为例,介绍Linux内核中断的注册方法,使用中断的方式检测GPIO30是否出现上升沿信号。中断在linux、设备驱动开发里使用的都非常多,可以更加实时的检测GPIO30的状态。 Linux内核…

“黑盒优化”是什么?

本文涉及“黑盒优化”和“零阶优化”的区别和联系,以及它们的定义 关于“零阶优化”,可以看文章“Optimizing molecules using efficient queries from property evaluations 一、“黑盒优化”是什么? “黑盒优化”是一种优化技术&#xff…

高等数学教材重难点题型总结(九)多元函数微分法及其应用

第九章习题总结完毕,最难的应该就是方程组求解隐函数中的雅可比行列式了,其他方面无论是期末还是考研都不会出太多难题。对于多元极限和连续性质要理解得更深刻一些,而方向导数、梯度等公式,应该熟练掌握~ 1. 写出多元函数的定义域…

TypeScript 第一站概念篇

前言 🔮 好长一段时间没有写文章了,原因是经历了一次工作变动,加入了一个有一定规模的开发团队,前端算上我有四个人,很欣慰,体验一下团队配合的感觉,在我之上有一个组长,比我年长四…

Azure 机器学习 - 使用 AutoML 和 Python 训练物体检测模型

目录 一、Azure环境准备二、计算目标设置三、试验设置四、直观呈现输入数据五、上传数据并创建 MLTable六、配置物体检测试验适用于图像任务的自动超参数扫描 (AutoMode)适用于图像任务的手动超参数扫描作业限制 七、注册和部署模型获取最佳试用版注册模型配置联机终结点创建终…

Spark的主要概念

文章目录 🔊博主介绍🥤本文内容🍊 1. RDD🍊 2. Spark SQL🍊 3. Spark Streaming🍊 4. MLlib🍊 5. GraphX🍊 总结 📢文章总结📥博主目标 🔊博主介绍…

ubuntu20.04配置解压版mysql5.7

目录 1.创建mysql 用户组和用户2.下载 MySQL 5.7 解压版3.解压 MySQL 文件4.将 MySQL 移动到适当的目录5.更改mysql目录所属的用户组和用户,以及权限6.进入mysql/bin/目录,安装初始化7.编辑/etc/mysql/my.cnf配置文件8.启动 MySQL 服务:9.建立…

在Linux上编译gdal3.1.2指南

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 以Ubuntu 18编译gdal3.1.2为例,编译gdal3.1.2需要先编译proj库和geos库(可选)。我选择的proj库版本为proj-7.1.0,编译proj-7.1.0需要先编译tiff库和sqlite3。我选择的sqlite3的版本为…

Unity的live2dgalgame多语言可配置剧情框架

这段代码用于读取表格 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using OfficeOpenXml; using System.IO; using UnityEngine.Networking; using UnityEngine.UI; using Random UnityEngine.Random;public class Plots…

工业5G路由器;小体积 千兆高速通信组网

计讯物联工业路由器TR232,5G高速网络,超低时延、高可靠性,小体积、易安装、强兼容,串口/网口多设备接入联网,为用户提供高速稳定的数据传输通道 。    小体积5G工业路由器TR323,外形1047824mm&#xff0…

datax使用笔记

文章目录 下载网上下载网盘下载github拿源码自己打包(适合爱折腾的人) 使用说明配置文件样例oracle例子mysql例子 项目要数据迁移,毫无疑问,果断datax。 下载 方式多种多样,爱用哪种用哪种。 网上下载 自己从网上找也可以,这个…

系列六、Mybatis的一级缓存

一、概述 Mybatis一级缓存的作用域是同一个SqlSession,在同一个SqlSession中执行两次相同的查询,第一次执行完毕后,Mybatis会将查询到的数据缓存起来(缓存到内存中), 第二次执行相同的查询时,会…

Vue 创建自定义 ref 函数

Vue 创建自定义 ref 函数 customRef customRef 用于:创建一个自定义的 ref 函数,并对其依赖项跟踪和更新触发进行显式控制。 使用 customRef 创建自定义 ref 函数 // 创建自定义 ref 函数 function myRef(value) {return customRef((track, trigger) &…

Laravel 后台管理 Dcat Admin 使用记录

Laravel Dcat Admin 安装配置修改配置表格操作 Ajax 结合 Pjax 更新数据状态表格 链接表单设置页面(通常修改更新在同一页面)表单 安装配置 安装文档地址 框架版本 Laravel 8.* 修改配置 修改 admin.php 文件 return [// 后台名称name > DAD后台管理,// 标题title > 后台…

ArmSom---SPI开发指南

1. 简介 RK3588从入门到精通本⽂主要介绍在Rockchip平台配置spi接口并且使用的方法开发板:ArmSoM-W3Kernel:5.10.160OS:Debian11 2. SPI接口概述 SPI(Serial Peripheral Interface),即串行外围设备接口&…