12 mysql char/varchar 的数据存储

前言

这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 

探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 

本文主要 的相关内容是 char 类类型的相关数据的存储  

这部分数据 客户端 和 服务器这边的交互 主要是以字符串的形式交互 

服务器这边的存储 主要是 按照特定的编码进行存储 

 

 

mysql 中 char 的服务器客户端的数据交互

测试表结构如下

CREATE TABLE `tz_test` (`id` int(11) NOT NULL AUTO_INCREMENT,`field1` char(6) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8INSERT INTO `test`.`tz_test`(`id`, `field1`) VALUES (1, '123456');

 

测试脚本如下 

package com.hx.test07;/*** Test06MysqlTimezone** @author Jerry.X.He* @version 1.0* @date 2023/4/24 16:26*/
public class Test06MysqlTimezone {// Test06MysqlTimezonepublic static void main(String[] args) {String url = "jdbc:mysql://10.60.50.16:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&autoReconnectForPools=true&useSSL=false";String username = "root";String password = "root";JdbcTemplate jdbcTemplate = Test14GenExpertSql.getMysqlJdbcTemplate(url, username, password);String sql = " select * from tz_test; ";List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);int x = 0;}}

 

mysql 是将给定的 char 的数据以 字符串的形式 交互给客户端的

mysql 服务器中对应的类型为 STRING

37ec3fda5a424feb9b1780ee3bc52bdc.png

 

与客户端的交互, 本身存放的就是 目标字符串 按照指定的编码存放的 字节序列

这里 直接响应 原数据 即可

88d1e58e50af49ee93f01aeeec907ff3.png

 

 

mysql 服务器 char 的存储

比如 这里我传入的是 “999999999”, 原始数据是 “888888888”

输入的字符集是 utf8_mb4_general_ci, 目标字段的字符集是 latin1_swedish_ci

然后这里的编码的转换处理是以 unicde 作为媒介进行的转换, utf8_mb4_general_ci 转换为 unicode, 然后再转换为 latin1_swedish_ci 的编码, 然后存储在 to 的位置

那么字符的存储就是以 这种编码来进行存储的

并且 如果长度不够 fieldLength, 则填充 空格至长度为 fieldLength, fieldLength 指的是字符的长度 

eb61c5e5f5424497996279a4df5891e8.png

处理之后, 给定的字段 更新成为了 “999999999 ”

dd162c4b5f1a470fac81de0d317c7486.png

 

 

这里编码的转换多提一句 

假设我这里设置的字段的编码集为 gbk 呢 ?

“你好” 中, 将 “你” 转换为 unicode 为 20320, 然后再转换为 gbk 存储 

bb6669cc01d740fbb1ee2a5027c09693.png

 

"你" 的 unicode, 以及 utf8 表示, 以及 gbk 表示 

ceb4b6a8899d40a3b034d8c9850402ea.png

 

 转换之后情况如下, 然后 我们来看一下 from 和 to 的相关信息 

可以看到的是 "你" 按照了字段的编码集 gbk 转换为了字节存储 

60b18a67f79b48f7aa56fd7f6e6172c9.png

eb966918fe934246b74e18553cdc4af5.png

 

假设我这里设置的字段的编码集为 latin-1 呢 ?

目标编码集 latin-1 不兼容于 unicode 中的 "你" 的中文表述, 这里 mysql 将 "你" 更新为了 "?" 然后进行存储, 同样 "好" 也存储为了 "?" 

这是一种不可逆的数据丢失 

bd8533d1d4544cc19bf317315cec7d3a.png

 

查看数据记录, 发现 field1 为 "??" 

 e840ada0eef64bd9bd862a18ebf4d75b.png

 

 

mysql 中 varchar的服务器客户端的数据交互

和上面 char 相同 

mysql 服务器中对应的类型为 VAR_STRING

b960a787bb1046ef89e9e1712ce17f12.png

 

与客户端的交互, 本身存放的就是 目标字符串 按照指定的编码存放的 字节序列

这里 直接响应 原数据 即可

0c0d8a906ca4448589c492ce11f7072f.png

 

 

mysql 服务器 varchar 的存储

比如 这里我传入的是 “999999999”, 原始数据是 “888888888”

输入的字符集是 utf8_mb4_general_ci, 目标字段的字符集是 latin1_swedish_ci

然后这里的编码的转换处理是以 unicde 作为媒介进行的转换, utf8_mb4_general_ci 转换为 unicode, 然后再转换为 latin1_swedish_ci 的编码, 然后存储在 to 的位置

那么字符的存储就是以 这种编码来进行存储的 

和上面 char 同理, char 如果长度不够 fieldLength 需要填充空格, varchar 存储是存储长度 和 具体的数据, fieldLength 指的是字符的长度 

c3f214fcdd2942bc8ba9e5a677c43d8c.png

 

处理之后, 给定的字段 更新成为了 “999999999”

b3cda61153c64795838ef97d747de339.png

 

 

 

 

 

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

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

相关文章

电子邮件服务器

目录 一、相关知识 二、邮件服务器种类 三、邮件传输协议 四、DNS中的MX记录 五、电子邮件系统工作原理 六、配置文件相关参数 七、邮件服务器配置案例 7.1设置用户别名邮箱 7.2空壳邮件服务器 一、相关知识 1、电子邮箱系统三个组成部分 MUA&#xff08;telnet&#xff09;:邮…

ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)

安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319) 二、CVE-2016-10319 一、ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319) Title 错误的固件更新SMC可能导致意外的大数据拷贝到安全内存中CVE ID CVE-2016-10319 Da…

JSX底层渲染机制

JSX底层渲染机制 一,.步骤 1.把我们写的jsx语法编译为虚拟DOM【virtualDOM】 虚拟DOM对象&#xff1a;框架自己内部构建的一套对象体系&#xff08;对象的相关成员都是React内部绑定的&#xff09;&#xff0c;基于这些属性描述出我们所构建视图中的DOM接的相关特征 1基于ba…

python中如何不修改字符串的前提,使其对大小写字母不敏感

如果你希望在不修改原字符串的基础上实现大小写不敏感的比较&#xff0c;你可以使用内置函数str.casefold()&#xff0c;它会将字符串转换为小写并处理一些特殊字符&#xff0c;使得比较更加严格。下面是如何使用它来实现大小写不敏感的比较&#xff1a; x input() y input()…

通讯软件014——分分钟学会Matrikon HDA Explorer

本文介绍如何使用Matrikon HDA Explorer工具软件进行OPC HDA通讯调试。相关软件可登录网信智汇&#xff08;wangxinzhihui.com&#xff09;下载。 1、连接OPC HDA Server数据源“Kepware.KEPServerEX HAD.V6”。 2、添加标签&#xff1a;右键点击“Kepware.KEPServerEX HAD.V6”…

Oracle-day6:over()函数

目录 一、over()开窗函数 二、无参over()的使用 三、over(partition by 列名) 四、over(order by 列名 asc/desc) 五、over(partition by 列名 order by 列名 asc|desc) 六、练习&#xff08;笔试&#xff09; 一、over()开窗函数 拓展:数据库的版本 oracle:8i 9i 10g …

信息化发展16

计算机网络 从网络的作用范围可将网络类别划分为个人局域网&#xff08; Per sona l Area Net work,PAN) &#xff1e;局域网C Local Area Net work, LAN ) &#xff1e; 城域网&#xff08; Metropoli tan Areaetwork , MAN &#xff09; 、广域网&#xff08; Wide Area Net…

王道考研数据结构

文章目录 C 环境准备官方文档环境准备在线运行VSCode 环境报错解决 绪论线性表顺序表链表错题 栈、队列和数组栈队列栈的应用之中缀转后缀特殊矩阵用数组压缩存储错题 串模式匹配之暴力和KMP 树与二叉树二叉树树和森林哈夫曼树和哈夫曼编码并查集错题 图图的基本概念图的存储及…

一文读懂MQTT各参数定义(非ChatGPT生成版)

文章目录 前言主流使用MQTT协议的云平台连接参数连接参数详解1.服务器地址&#xff08;Server Address&#xff09;2.端口&#xff08;Port&#xff09;3.客户端标识符&#xff08;Client Identifier&#xff09;4.用户名和密码&#xff08;Username and Password&#xff09;5…

[音视频] SDL 渲染

调用的 API SDL_INIT # 初始化 SDL 库 SDL_CreateWIndow # 创建窗口 SDL_CreateRenderer # 创建渲染器 需要指定渲染窗口 SDL_CreateTexture # 需要指定纹理的上下文 和 数据修改频率 SDL_UpdateTexuture # 把 cpu 数据拷贝到 gpu 纹理中 SDL_RenderClear # 清空窗口纹理 SDL_…

Python 新版本有75个内置函数,你不会不知道吧

目录 Python 内置函数 前言 属性分类 模块 module 29. format() 35. help() 对象 object 17. copyright() 18. credits() 26. exit() 44. license() 59. quit() 类 class 08. bool() 10. bytearray() 11. bytes() 14. classmethod() 16. complex() 20. dict…

记一次postgres导致cpu100%

周末想打两把训练赛&#xff0c;没想到朋友发来一个截图 我&#xff1a;嗯&#xff1f;&#xff1f;wtf 于是我上服务器看了一下日志&#xff0c;诶我超&#xff0c;还真的 查看进程详情 [rootiZ7xv7q4im4c48qen2do2bZ project]# pstree -tp postgres memory(904475)─┬─…

【Spring面试题】IOC控制反转和DI依赖注入(详解)

IOC Inversion of Control 控制反转&#xff0c;是一种面向对象的思想。 控制反转就是把创建和管理 bean 的过程转移给了第三方。而这个第三方&#xff0c;就是 Spring IoC Container&#xff0c;对于 IoC 来说&#xff0c;最重要的就是容器。 通俗点讲&#xff0c;因为项目…

SASS的@规则

1&#xff0c;import sass扩展了import导入&#xff0c;对于css&#xff0c;import导入在页面加载的时候去下载导入的外部文件&#xff0c;而sass的导入&#xff0c;在编译成css文件的时候就将外部的sass文件导入合并编译成一个css文件。 他支持同时导入多个文件&#xff1b;…

Xubuntu16.04系统中解决无法识别exFAT格式的U盘

问题描述 将exFAT格式的U盘插入到Xubuntu16.04系统中&#xff0c;发现系统可以识别到此U盘&#xff0c;但是打不开&#xff0c;查询后发现需要安装exfat-utils库才行。 解决方案&#xff1a; 1.设备有网络的情况下 apt-get install exfat-utils直接安装exfat-utils库即可 2.设备…

ZigBee案例笔记 -- RFID卡片读写(模拟饭卡)

RFID模拟饭卡应用 RFID&#xff08;射频识别技术&#xff09;RFID通讯协议RFID发展历史RFID操作流程说明RFID卡片读写流程RFID寻卡RFID防碰撞RFID选卡RFID卡密验证RFID读卡RFID写卡读写数据流程 RFID饭卡模拟案例驱动代码串口协议饭卡操作案例结果优化建议 RFID&#xff08;射频…

C语言入门 Day_12 一维数组

目录 前言 1.创建一维数组 2.使用一维数组 3.易错点 4.思维导图 前言 存储一个数据的时候我们可以使用变量&#xff0c; 比如这里我们定义一个记录语文考试分数的变量chinese_score&#xff0c;并给它赋值一个浮点数&#xff08;float&#xff09;。 float chinese_scoe…

详细介绍如何基于ESP32实现低功耗的电子纸天气显示器--附完整源码

实现界面展示 这是一款天气显示器,由支持 wifi 的 ESP32 微控制器和 7.5 英寸电子纸(又名电子墨水)显示器供电。当前和预测的天气数据是从 OpenWeatherMap API 获取的。传感器为显示屏提供准确的室内温度和湿度。 该项目在睡眠时消耗约 14μA,在约 10 秒的清醒期…

GitHub打不开解决方法——授人以渔

打不开GitHub的原因之一&#xff0c;DNS地址解析到了无法访问的ip。&#xff08;为什么无法访问&#xff1f;&#xff09; 1、打开GitHub看是哪个域名无法访问&#xff0c;F12一下 2、DNS解析看对应的域名目前哪个IP可以访问 DNS解析的网址&#xff1a; &#xff08;1&#x…

阿里云日志服务Logstore与MySQL数据库关联

前提条件 已采集日志到日志服务。更多信息&#xff0c;请参见数据采集。已为日志字段创建索引。更多信息&#xff0c;请参见创建索引。已有可用的MySQL数据库。更多信息&#xff0c;请参见创建数据库和账号。 操作步骤 1、在MySQL数据库中&#xff0c;创建用户属性表&#xf…