当前位置: 首页 > news >正文

mysql中varchar长度为多少

一. varchar存储规则:

4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) 
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节 

二. varchar和char 的区别:

char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是: char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节). 

在MySQL中用来判断是否需要进行对数据列类型转换的规则

1、在一个数据表里,如果每一个数据列的长度都是固定的,那么每一个数据行的长度也将是固定的.

2、只要数据表里有一个数据列的长度的可变的,那么各数据行的长度都是可变的.

3、如果某个数据表里的数据行的长度是可变的,那么,为了节约存储空间,MySQL会把这个数据表里的固定长度类型的数据列转换为相应的可变长度类型.例外:长度小于4个字符的char数据列不会被转换为varchar类型

 

 ps :被问到一个问题:MySQL中varchar最大长度是多少?

这不是一个固定的数字。本文简要说明一下限制规则。

1、限制规则

字段的限制在字段定义的时候有以下规则:

a) 存储限制

varchar最多能存储65535个字节的数据。varchar 的最大长度受限于最大行长度(max row size,65535bytes)。65535并不是一个很精确的上限,可以继续缩小这个上限。65535个字节包括所有字段的长度,变长字段的长度标识(每个变长字段额外使用1或者2个字节记录实际数据长度)、NULL标识位的累计。

 

NULL标识位,如果varchar字段定义中带有default null允许列空,则需要需要1bit来标识,每8个bits的标识组成一个字段。一张表中存在N个varchar字段,那么需要(N+7)/8 (取整)bytes存储所有的NULL标识位。

如果数据表只有一个varchar字段且该字段DEFAULT NULL,那么该varchar字段的最大长度为65532个字节,即65535-2-1=65532 byte。

mysql> create table t1 ( name varchar(65532) default null)charset=latin1;
Query OK, 0 rows affected (0.09 sec)mysql> 
mysql> create table t2 ( name varchar(65533) default null)charset=latin1;  
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
mysql> 

可以看见当设置长度为65533时,已经超过行最大长度,我们可以计算一下,行最大长度是65535字节。上面t2表name字段使用varchar(65533),字符集是latin1,占用1个字节。还有默认为空,那么还有null标识位,( 1 + 7 ) / 8 =1,所以null标识位占用1个字节。现在我们来看看,65533 + 1 + 2=65536字节,已经大于行最大长度。这里2字节怎么来的???因为varchar类型存储变长字段的字符类型,与char类型不同的是,其存储时需要在前缀长度列表加上实际存储的字符,当存储的字符串长度小于255字节时,其需要1字节的空间,当大于255字节时,需要2字节的空间。

如果数据表只有一个varchar字段且该字段NOT NULL,那么该varchar字段的最大长度为65533个字节,即65535-2=65533byte

mysql> create table t2 ( name varchar(65533) not null) charset=latin1;   
Query OK, 0 rows affected (0.03 sec)mysql> 
mysql> create table t3 ( name varchar(65534) not null) charset=latin1;  
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
mysql> 

b) 编码长度限制

  字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;

  字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。

  若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。

 

c) 行长度限制

导致实际应用中varchar长度限制的是一个行定义的长度。 MySQL要求一个行的定义长度不能超过65535。若定义的表长度超过这个值,则提示

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。

2、计算例子

举两个例说明一下实际长度的计算。

a)  若一个表只有一个varchar类型,如定义为

create table t4(c varchar(N)) charset=gbk;

  1. 则此处N的最大值为(65535-1-2)/2= 32766。
  2. 减1的原因是实际行存储从第二个字节开始;
  3. 减2的原因是varchar头部的2个字节表示长度;
  4. 除2的原因是字符编码是gbk。

 

b) 若一个表定义为

create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;

  1. 则此处N的最大值为 (65535-1-2-4-30*3)/3=21812
  2. 减1和减2与上例相同;
  3. 减4的原因是int类型的c占4个字节;
  4. 减30*3的原因是char(30)占用90个字节,编码是utf8。 

如果被varchar超过上述的b规则,被强转成text类型,则每个字段占用定义长度为11字节,当然这已经不是varchar了。

则此处N的最大值为 (65535-1-2-4-30*3)/3=21812,例子如下:

mysql> create table t4(c int, c2 char(30), c3 varchar(21812)) charset=utf8; 
Query OK, 0 rows affected (0.05 sec)mysql> 
mysql> create table t5(c int, c2 char(30), c3 varchar(21813)) charset=utf8;  
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
mysql> 

最后让我们来看一个例子

 
  1. CREATE TABLE t6 (

  2. id int,

  3. a VARCHAR(100) DEFAULT NULL,

  4. b VARCHAR(100) DEFAULT NULL,

  5. c VARCHAR(100) DEFAULT NULL,

  6. d VARCHAR(100) DEFAULT NULL,

  7. e VARCHAR(100) DEFAULT NULL,

  8. f VARCHAR(100) DEFAULT NULL,

  9. g VARCHAR(100) DEFAULT NULL,

  10. h VARCHAR(100) DEFAULT NULL,

  11. i VARCHAR(N) DEFAULT NULL

  12. ) CHARSET=utf8;

那么上面这条语句中的varchar(N)的最大值是多少呢?

让我们来计算一下

每个NULL字段用1bit标识,10个字段都是default null,那么需要用(10+7)/8bit = 2 bytes存储NULL标识位。int占用4个 byte。

(65535 - 1 - 2*8  -4 - 100*3*8 -2)/3=21037

mysql> CREATE TABLE t6 ( id int, a VARCHAR(100) DEFAULT NULL, b VARCHAR(100) DEFAULT NULL, c VARCHAR(100) DEFAULT NULL, d VARCHAR(100) DEFAULT NULL, e VARCHAR(100) DEFAULT NULL, f VARCHAR(100) DEFAULT NULL, g VARCHAR(100) DEFAULT NULL, h VARCHAR(100) DEFAULT NULL, i VARCHAR(21037) DEFAULT NULL ) CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)mysql> 
mysql> CREATE TABLE t7 ( id int, a VARCHAR(100) DEFAULT NULL, b VARCHAR(100) DEFAULT NULL, c VARCHAR(100) DEFAULT NULL, d VARCHAR(100) DEFAULT NULL, e VARCHAR(100) DEFAULT NULL, f VARCHAR(100) DEFAULT NULL, g VARCHAR(100) DEFAULT NULL, h VARCHAR(100) DEFAULT NULL, i VARCHAR(21038) DEFAULT NULL ) CHARSET=utf8;  
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
mysql> 

 可以看见多一个字符都报错了。

varchar到底能存多少个字符?这与使用的字符集相关,latin1、gbk、utf8编码存放一个字符分别需要占1、2、3个字节。

3、varchar物理存储

在物理存储上,varchar使用1到2个额外的字节表示实际存储的字符串长度(bytes)。如果列的最大长度小于256个字节,用一个字节表示(标识)。如果最大长度大于等于256,使用两个字节。

当选择的字符集为latin1,一个字符占用一个byte

varchar(255)存储一个字符,一共使用2个bytes物理空间存储数据实际数据长度和数据值。

varchar(256)存储一个字符,使用2 bytes表示实际数据长度,一共需要3 bytes物理存储空间。

varchar对于不同的RDBMS引擎,有不通的物理存储方式,虽然有统一的逻辑意义。对于mysql的不同存储引擎,其实现方法与数据的物理存放方式也不同。

4、InnoDB中的varchar

InnoDB中varchar的物理存储方式与InnoDB使用的innodb_file_format有关。早期的innodb_file_forma使用的Antelope文件格式,支持redundant和compact两种row_format。从5.5开始或者InnoDB1.1,可以使用一种新的file format,Barracuda。Barracuda兼容Redundant,另外还支持dynamic和compressed两种row_format.

当innodb_file_format=Antelope,ROW_FORMAT=REDUNDANT 或者COMPACT。

innodb的聚集索引(cluster index)仅仅存储varchar、text、blob字段的前768个字节,多余的字节存储在一个独立的overflow page中,这个列也被称作off-page。768个字节前缀后面紧跟着20字节指针,指向overflow pages的位置。

另外,在innodb_file_format=Antelope情况下,InnoDB中最多能存储10个大字段(需要使用off-page存储)。innodbd的默认page size为16KB,InnoDB单行的长度不能超过16k/2=8k个字节,(768+20)*10 < 8k。

当innodb_file_format=Barracuda, ROW_FORMAT=DYNAMIC 或者 COMPRESSED

innodb中所有的varchar、text、blob字段数据是否完全off-page存储,根据该字段的长度和整行的总长度而定。对off-page存储的列,cluster index中仅仅存储20字节的指针,指向实际的overflow page存储位置。如果单行的长度太大而不能完全适配cluster index page,innodb将会选择最长的列作为off-page存储,直到行的长度能够适配cluster index page。

5、MyISAM中的varchar

对于MyISAM引擎,varchar字段所有数据存储在数据行内(in-line)。myisam表的row_format也影响到varchar的物理存储行为。

MyISAM的row_format可以通过create或者alter sql语句设为fixed和dynamic。另外可以通过myisampack生成row_format=compresse的存储格式。

当myisam表中不存在text或者blob类型的字段,那么可以把row_format设置为fixed(也可以为dynamic),否则只能为dynamic。

当表中存在varchar字段的时候,row_format可以设定为fixed或者dynamic。使用row_format=fixed存储varchar字段数据,浪费存储空间,varchar此时会定长存储。row_format为fixed和dynamic,varchar的物理实现方式也不同(可以查看源代码文件field.h和field.cc),因而myisam的row_format在fixed和dynamic之间发生转换的时候,varchar字段的物理存储方式也将会发生变化。

参考资料:

MySQL :: MySQL 8.0 Reference Manual :: 8.4.7 Limits on Table Column Count and Row Size

<<MySQL技术内幕--InnoDB引擎第二版>>

相关文章:

mysql中varchar长度为多少

一. varchar存储规则&#xff1a; 4.0版本以下&#xff0c;varchar(20)&#xff0c;指的是20字节&#xff0c;如果存放UTF8汉字时&#xff0c;只能存6个&#xff08;每个汉字3字节&#xff09; 5.0版本以上&#xff0c;varchar(20)&#xff0c;指的是20字符&#xff0c;无论存…...

python+selenium实现UI自动化(入门篇)

一、基础准备。 python环境安装&#xff0c;参考&#xff1a;CSDN pycharm安装&#xff0c;参考&#xff1a;CSDN 谷歌浏览器驱动配置&#xff0c;参考&#xff1a;CSDN二、新建pycharm项目 截图中&#xff0c;上面是项目地址&#xff08;可以提前在指定位置创建文件夹&#xf…...

深度学习基础知识 nn.Sequential | nn.ModuleList | nn.ModuleDict

深度学习基础知识 nn.Sequential &#xff5c; nn.ModuleList &#xff5c; nn.ModuleDict 1、nn.Sequential 、 nn.ModuleList 、 nn.ModuleDict 类都继承自 Module 类。2、nn.Sequential、nn.ModuleList 和 nn.ModuleDict语法3、Sequential 、ModuleDict、 ModuleList 的区别…...

【DevOps】搭建你的第一个 Docker 应用栈

搭建你的第一个 Docker 应用栈 1.Docker 集群部署2.第一个 Hello World2.1 获取应用栈各节点所需镜像2.2 应用栈容器节点互联2.3 应用栈容器节点启动2.4 应用栈容器节点的配置2.4.1 Redis Master 主数据库容器节点的配置2.4.2 Redis Slave 从数据库容器节点的配置2.4.3 Redis 数…...

软件测试职业生涯需要编写的全套文档模板,收藏这一篇就够了 ~

作为一名测试工程师&#xff0c;在整个的职业生涯中&#xff0c;会涉及到各种不同类型的文档编写&#xff0c;大体包括如下&#xff1a; 对应文档模板及文档编写视频如下&#xff1a; 一、测试岗位必备的文档 在一个常规的软件测试流程中&#xff0c;会涉及到测试计划、测试方…...

【Kubernetes】Pod——k8s中最重要的对象之一

Pod是什么&#xff1f;如何使用Pod&#xff1f;资源共享和通信Pod 中的存储Pod 联网&#xff1a;跨 Pod 通信 静态 Pod感谢 &#x1f496; Pod是什么&#xff1f; Pod是k8s中创建和管理的、最小的可部署的计算单元。它包含一个或多个容器。就像豌豆荚里面包含了多个豌豆一样。…...

vue-cli-service: command not found问题解决

解决方案&#xff1a;重新安装一下&#xff1a; npm install -g vue/cli...

每日一练 | 华为认证真题练习Day117

1、缺省情况下&#xff0c;广播网络上OSPF协议Deadtime是&#xff1f; A. 20s B. 40s C. 10s D. 30s 2、当两台OSPF路由器形成TWO-WAY邻居关系时&#xff0c;LSDB已完成同步&#xff0c;但是SPF算法尚未运行。 A. 对 B. 错 3、以下哪种协议不属于文件传输协&#xff1f; …...

【JVM】垃圾回收(GC)详解

垃圾回收&#xff08;GC&#xff09;详解 一. 死亡对象的判断算法1. 引用计数算法2. 可达性分析算法 二. 垃圾回收算法1. 标记-清除算法2. 复制算法3. 标记-整理算法4. 分代算法 三. STW1. 为什么要 STW2. 什么情况下 STW 四. 垃圾收集器1. CMS收集器&#xff08;老年代收集器&…...

阿里云服务器公网带宽多少钱1M?

阿里云服务器公网带宽计费模式按固定带宽”计费多少钱1M&#xff1f;地域不同带宽价格不同&#xff0c;北京、杭州、深圳等大陆地域价格是23元/Mbps每月&#xff0c;中国香港1M带宽价格是30元一个月&#xff0c;美国硅谷是30元一个月&#xff0c;日本东京1M带宽是25元一个月&am…...

应用DeepSORT实现目标跟踪

在ByteTrack被提出之前&#xff0c;可以说DeepSORT是最好的目标跟踪算法之一。本文&#xff0c;我们就来应用这个算法实现目标跟踪。 DeepSORT的官方网址是https://github.com/nwojke/deep_sort。但在这里&#xff0c;我们不使用官方的代码&#xff0c;而使用第三方代码&#…...

Beyond Compare 4 30天评估到期 解决方法

Beyond Compare 4 用习惯了&#xff0c;突然提示评估到期了&#xff0c;糟心&#x1f604; 该方法将通过修改注册表&#xff0c;使BeyondCompare 版本4可以恢复到未评估状态&#xff0c;使其可以持续使用30天评估&#x1f604;。 修改注册表 第一步&#xff1a;打开注册表。 在…...

化妆品用乙基己基甘油全球市场总体规模2023-2029

乙基己基甘油又名辛氧基甘油&#xff0c;分子式 C11H24O3&#xff0c;分子量 204.306&#xff0c;沸点 325℃&#xff0c;密度 0.962&#xff0c;无色液体&#xff0c;涂抹性能适中的润肤剂、保湿剂及润湿剂。它能够在提高配方滋润效果的同时又具有柔滑的肤感。加入在某些膏霜体…...

springboot家政服务管理平台springboot29

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…...

【网络安全】如何保护IP地址?

使用防火墙是保护IP地址的一个重要手段。防火墙可以监控和过滤网络流量&#xff0c;并阻止未经授权的访问。一家网络安全公司的研究显示&#xff0c;超过80%的企业已经部署了防火墙来保护他们的网络和IP地址。 除了防火墙&#xff0c;定期更新操作系统和应用程序也是保护IP地址…...

2023年失业了,想学一门技术可以学什么?

有一个朋友&#xff0c;大厂毕业了&#xff0c;原本月薪估计有5w吧&#xff0c;年终奖也不错&#xff0c;所以早早的就买了房生了娃&#xff0c;一直是人生赢家的姿态。 但是今年突然就被毕业了&#xff0c;比起房货还有个几百万没还来说&#xff0c;他最想不通的是自己的价值…...

MySQL-MVCC(Multi-Version Concurrency Control)

MySQL-MVCC&#xff08;Multi-Version Concurrency Control&#xff09; MVCC&#xff08;多版本并发控制&#xff09;&#xff1a;为了解决数据库并发读写和数据一致性的问题&#xff0c;是一种思想&#xff0c;可以有多种实现方式。 核心思想&#xff1a;写入时创建行的新版…...

ArcGIS中的镶嵌数据集与接缝线

此处介绍一种简单方法&#xff0c;根据生成的轮廓线来做镶嵌数据集的拼接。 一、注意修改相邻影像的上下重叠。注意修改ZOrder和每幅影像的范围。 二、修改新的镶嵌线并且导出影像文件。 三、还有其他方法和注意事项。...

网络安全工程师自主学习计划表(具体到阶段目标,保姆级安排,就怕你学不会!)

前言 接下来我将给大家分享一份网络安全工程师自学计划指南&#xff0c;全文将从学习路线、学习规划、学习方法三个方向来讲述零基础小白如何通过自学进阶网络安全工程师&#xff0c;全文篇幅有点长&#xff0c;同学们可以先点个收藏&#xff0c;以免日后错过了。 目录 前言…...

Linux 根据 PID 查看进程名称

ps aux | grep PID...

Python二级 每周练习题21

练习一: 提示用户输入两个正整数&#xff0c;编程求出介于这两个数之间的所有质数并打印输出。 显示格式为“*数是质数。” 答案: x(int(input(请输入第一个正整数:)),int(input(请输入第二个正整数:))) #变量x存放input输入的两个整数的元组 Num1min(x) #判断输入数字…...

【算法训练-数组 三】【数组矩阵】螺旋矩阵、旋转图像、搜索二维矩阵

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是螺旋矩阵&#xff0c;使用【二维数组】这个基本的数据结构来实现 螺旋矩阵【EASY】 二维数组的结构特性入手 题干 解题思路 根据题目示例 mat…...

LED灯实验--汇编

asm-led.S .text .global _start _start: /* 1. led灯的初始化 *//* 1.1 使能GPIOE、DPIOF外设控制器的时钟 */ldr r0, 0x50000A28ldr r1, [r0]orr r1, r1, #(0x3 << 4)str r1, [r0]/* 1.2 设置PE10、PE8、PF10引脚为输出模式 */ldr r0, 0x50006000ldr r1, [r0]bic r1,…...

Android多线程学习:线程池(一)

一、概念 线程池&#xff1a;创建并维护一定数量的空闲线程&#xff0c;当有需要执行的任务&#xff0c;就交付给线程池中的一个线程&#xff0c;任务执行结束后&#xff0c;该线程也不会死亡&#xff0c;而是回到线程池中重新变为空闲状态。 线程池优点&#xff1a; 1、重用…...

网络安全(黑客技术)—小白自学笔记

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟入…...

掌握核心技巧就能创建完美的目录!如何在Word中自动创建目录

目录是Word布局的一个重要因素&#xff0c;尤其是在编写较长的文档时。那么&#xff0c;你如何在你的作品中添加目录呢&#xff1f;在这篇文章中&#xff0c;我将分享一些基于Word2016自动创建目录的经验。希望它能或多或少地帮到你。 自动创建目录 1、输入目录文本的名称&am…...

正则表达式中re.match、re.search、re.findall的用法和区别

这位作者的例子写的非常好&#xff0c;记录一下&#xff0c;目前用到的比较多的是findall 正则表达式中re.match、re.search、re.findall的用法和区别_<re.match object; span(0, 270), match<a href"/-CSDN博客...

算法题:买卖股票的最佳时机含手续费(动态规划解法贪心解法-详解)

这道题有两种解法&#xff1a;动态规划 or 贪心算法。 贪心算法的提交结果要比动态规划好一些&#xff0c;总体上动态规划的解法更容易想到。&#xff08;完整题目附在了最后&#xff09; 1、动态规划解法 设置两个数&#xff0c;dp[0]表示遍历到股票prices[i]时手里没有股…...

【gcc】RtpTransportControllerSend学习笔记 4:码率分配

本文是woder大神 的文章的学习笔记。 大神的webrtc源码分析(8)-拥塞控制(上)-码率预估 详尽而具体,堪称神作。 gcc保障带宽公平性,预估码率后要分配码率,实现qos效果: webrtc源码分析(9)-拥塞控制(下)-码率分配 是 woder 大神进一步给出的另一篇神作。 本文是对(https://w…...

「专题速递」AR协作、智能NPC、数字人的应用与未来

元宇宙是一个融合了虚拟现实、增强现实、人工智能和云计算等技术的综合概念。它旨在创造一个高度沉浸式的虚拟环境&#xff0c;允许用户在其中交互、创造和共享内容。在元宇宙中&#xff0c;人们可以建立虚拟身份、参与虚拟社交&#xff0c;并享受无限的虚拟体验。 作为互联网大…...

有没有建筑学做区位分析的网站/杭州网络推广

List 列表[] 可变的 lst [1,2,3,4]#改 lst[(元素下标)] 需要修改的 #通过下表修改lst[下标:下标] 需要修改的 #通过范围修改#加 lst.append() #追加lst.insert((插在谁的后面),(插什么)) #插入lst.extend() #扩展迭代添加#删除 lst.remove() #移除删除指定元素lst.pop() #弹…...

电子书网站建设/seo实战培训机构

最后博文&#xff0c;我们引入软件体系结构的基本概念&#xff0c;接下来&#xff0c;我们将介绍如何构建一个软件系统。 当我们開始进行系统架构设计的时候。一般会考虑下面几点&#xff1a; 所设计的软件体系结构的主要功能要素是什么。怎样将这些要素与其它系统关联。哪些信…...

武汉做个网站多少钱/百度风云榜排行榜

作者&#xff1a;developer http://cnblogs.com/developer_chan/p/10450908.html 我们都知道HashMap是线程不安全的&#xff0c;在多线程环境中不建议使用&#xff0c;但是其线程不安全主要体现在什么地方呢&#xff0c;本文将对该问题进行解密。 1、jdk1.7中的HashMap 在jdk1…...

手机网站建设的整体流程图/韩国今日特大新闻

背景&#xff1a; MongoDB和MySQL一样&#xff0c;都会产生慢查询&#xff0c;所以都需要对其进行优化&#xff1a;包括创建索引、重构查询等。现在就说明在MongoDB下的索引相关知识点&#xff0c;可以通过这篇文章MongoDB 查询优化分析了解MongoDB慢查询的一些特点。 执行计划…...

天津网站建设icp备/如何做好网络营销推广

java中获取路径 在java中获取当前项目的路径信息 public class BasePath {public static void main(String[] args) throws URISyntaxException {//1、来获得当前线程的ClassLoader相应的资源路径String url Thread.currentThread().getContextClassLoader().getResource(&qu…...

合肥网站建设网站推广/百度搜索排名优化

编码器的输出AB两相的波形如下图所示&#xff0c;其原理不赘述。 软件解码方案有两种 1.查表法 有波形可以知道&#xff0c;波形有四种状态组成&#xff1a; A相0110B相0011 当AB相波形经历00—10—11—01的状态就表示一个正向步进。反之则表示反向步进。 读引脚电平的代码…...