首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL基础『数据类型』

testINT; 注意: MySQL 中创建无符号类型,是在类型之后加上 unsigned 括号中的数字通常用于指定显示宽度,并不表示存储范围 向表中插入一组合法的数据 mysql> insert into...4.1.CHAR char 在 C/C++ 中称为字符类型,大小为 1 字节,在 MySQL 中则是叫做 固定长度字符串,也就是说 char 可以存储字符串(前提是长度足够) CHAR(L) 创建一张表...; 向表中插入字符串 注:在 MySQL 中使用 ‘ ' 或者 " " 括起来的为字符串 mysql> insert into testChar values ('a'), ('bb'), ('战'),...testVarchar; 注意: 我这里能修改成功是因为当前的 testVarchar 表中只有一个字符,数据表中的字段也是需要占用空间的,当字段过多时,是无法修改 varchar 为最大容量的...如果实际使用场景中多次涉及 varchar 的边界,可以改用 text,这是一个专门用来存储文本数据的类型,比如我当前编写的博客,就是通过该类型存储的 4.3.如何使用 char 与 varchar 的区别如下

22010

MySQL 简单查询语句执行过程分析(五)发送数据给客户端

示例表中 e1 字段各选项及其对应的整数值如下图: 假设存储引擎返回的 e1 字段整数值为 7,发送数据之前,会找到 7 对应选项的内容成都,占用字节数为 2(字数)* 3(utf8 一个汉字占用字节数...2.5 set 类型 set 类型字段,在存储引擎中也是以整数存储,发送数据之前,通过整数找到一个或多个对应选项的内容作为字段内容,如果有多个选项,字段内容中多个选项的内容之间用逗号分隔。...bit 类型字段在 InnoDB 中是以 C/C++ 中的 char 类型存储的,实际就是按字节存储,1 字节可以存储 8 bit,示例表结构中,bit1 定义为 bit(8) 正好占用 1 字节,bit2...存储引擎返回 bit 类型字段给 server 层时,就是以 C/C++ 中的 char * 指针返回的。...2.8 decimal 类型 decimal 类型在存储引擎中是以二进制存储的,发送数据之前,会先把二进制转换为浮点数,然后再把浮点数转换为字符串,把字符串内容长度和字符串内容发送给客户端。

1.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    mysql基础知识(4)

    在使用复合索引进行查询时,MySQL会首先匹配索引的最左边的列(第一个列),然后依次匹配后续的列。...如果最左边的列没有被包含在查询条件中,则MySQL将不会使用该复合索引 例如:有一个复合索引包含3个字段(A、B、C) 如果只包含了A列,则索引可能被使用 如果包含了A、B列,则索引可以较为高效的使用。...2、JOIN JOIN 子句是在FROM子句之后,根据相关列合并两个或多个表中的行,它决定了如何匹配不同表中的行。...1.连接器,这里负责跟客户端建立连接、获取权限、维持和管理连接,这里需要我们输入在命令行输入mysql -u root -p 输入密码或使用navicat等客户端登录。...Mysql中having和where的区别 having是在分组后对数据进行过滤 where是在分组前对数据进行过滤 having后面可以使用聚合函数 where后面不可以使用聚合函数 如果mysql创建函数报错

    8810

    面银行软开,我最自信了!!

    我们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎支持的索引类型也不相同,比如 InnoDB 支持索引类型是 B+树 ,且是默认使用,也就是说在数据表中创建的主键索引和二级索引默认使用的是...每一种存储引擎支持的索引类型不一定相同,我在表中总结了 MySQL 常见的存储引擎 InnoDB、MyISAM 和 Memory 分别支持的索引类型。...InnoDB 是在 MySQL 5.5 之后成为默认的 MySQL 存储引擎,B+Tree 索引类型也是 MySQL 存储引擎采用最多的索引类型。...代码题 用两个栈实现队列 十进制转二进制 交通银行 说一下主键和索引 主键是用于唯一标识数据库表中每一行数据的字段或字段组合。它具有以下特点: 主键必须是唯一的,每一行数据都必须具有唯一的主键值。...索引可以建立在一个或多个列上,这些列可以是表中的任意字段。索引的创建过程会对指定的列进行排序和存储,以便快速定位和访问数据。

    44110

    Lua进程内存优化方案总结

    字段裁剪 显而易见,把没用的字段干掉,就可以省内存。根据前文的内存计算公式,哪怕只存了一个bool值,占用也是16字节。因此,首先考虑是去掉一些完全没用的字段,其次是去掉一些默认值的字段。...实际可以序列化为紧凑的二进制形式。 改为字符串后,要是想访问里面的count,怎么办?还是设置元表,在使用的时候还原回Table即可。...而Lua因为是弱类型的解释语言,除了本身的数据存储,还需要类型描述以及GC等信息,单个字段的消耗是16字节+,相比C++膨胀了数倍,虽然实际上Lua已经实现的很精巧了。...比如某个Table结构有a、b、c三个字段,都为int范围的整数,那我们在C++中开辟一块12字节的内存来存放就行了,干掉Lua中的Table,把对a、b、c的读写操作都映射到C++里的这块内存上。...不过这里需要注意的是,在设置元素时,要确保是符合protobuf的定义的,毕竟Lua是可以随便写,如果上面的例子: array[1] = 2 把整数设置到了字符串数组中,C++层要能够检测并抛出异常出来

    23120

    你以为你真的了解MySQL中的数据类型吗?这里保证有你不会的!

    关于查询VARCHAR字段存储的实际字节数,需要注意的是,MySQL并不直接提供查询VARCHAR字段存储大小的函数。...在实际应用中,我们可以通过计算字符串长度(使用LENGTH函数并指定字符集)和加上长度前缀(1或2个字节)来大致估算VARCHAR字段的存储空间。...data字段使用BINARY(16)类型,表示二进制数据,固定长度为16字节。 INSERT INTO语句用于向binary_data表格中插入三条示例数据。...注意,由于BINARY(16)是固定长度的,如果插入的二进制数据长度小于16字节,MySQL会在右侧填充空格(但在比较时会忽略这些空格)。...注意事项 存储和检索:二进制字符串类型在存储和检索时是按字节处理的,因此需要注意数据的字节长度和存储空间的限制。 比较和排序:在比较和排序二进制字符串时,MySQL会区分大小写和二进制值。

    13010

    掌握消息协议设计的艺术:释放高效通信的力量

    (4)可读性:决定了使用协议的调试和维护成本。(5)兼容性:协议可能会经常升级,使⽤协议的双⽅是否可以独⽴升级协 议、增减协议中的字段⾮常重要。(6)跨平台语言:协议适用于任何语言来实现。...⽐如不同表的插头,还需要进⾏各种转换,如果我们两端进⾏通信没有约定好协议,那彼此是不知道对⽅ 发送的数据是什么意义。二、协议设计(1)消息边界。使用什么方式界定消息边界。(2)版本区分。...在序列化后的buffer前⾯增加⼀个字符流的头部,其中有个字段存储消息总⻓度,根据特殊字符(⽐ 如根据\n或者\0)判断头部的完整性。这样通常⽐3要麻烦⼀些,HTTP和REDIS采⽤的是这种⽅式。...在redis 中, ⼀些数据的类型通过它的第⼀个字节进⾏判断:(1)单⾏(Simple Strings)回复:回复的第⼀个字节是 “+” 。...(4)多⾏字符串(Bulk Strings):回复的第⼀个字节是 “$” 。(5)数组(Arrays):回复的第⼀个字节是 “*”。

    11610

    从V8引擎来看JS中这个假数组

    那么数组中的连续内存说的是,通过在内存中划出一串连续且长度固定的空间,用来于存放一组有限且数据类型相同的数据结构。在C/C++、Java等编译型语言中数组的实现都是这个。...快数组 先看快数组,快数组是一种线性存储,其长度是可变的,可以动态调整存储空间。其内部有扩容和收缩机制,来看一下V8中扩容的实现。源码(C++): ....慢数组 慢数组底层实现使用的是 HashTable 哈希表,相比于快数组,他不用开辟大块的连续空间,从而节省内存,但无疑执行效率是比快数组要低的(时间换空间)。...当然有,那就是ES6中ArrayBuffer。ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区,它是一个字节数组。...使用ArrayBuffer能在操作系统内存中得到一块连续的二进制区域。然后这块区域供JS去使用。

    1.4K20

    MySQL 大对象(BLOB)和字符串的分身术

    MySQL 有一些字段类型是用同一个 C++ 类或通过继承同一个 C++ 类的方式实现的。...定长字符串 定长字符串的实现类为 Field_string,有 2 种字段类型: CHAR,存储文本内容,字段长度固定,创建表时指定的长度不是字节数,而是字符数,实际占用字节数取决于该字段的字符集。...BINARY,存储二进制内容,字段长度固定,创建表时指定的长度为字节数。例如,字段 bin1 BINARY(10) 需要占用 10 字节。...变长字符串 变长字符串的实现类为 Field_varstring,有 2 种字段类型: VARCHAR,存储文本内容,字段长度不固定,创建表时指定的长度不是字节数,而是字符数,最大占用字节数取决于该字段的字符集...VARBINARY,存储二进制内容,字段长度不固定,创建表时指定的长度为字节数。例如:字段 varbin1 VARBINARY(32) 最大占用 32 字节。

    1.2K40

    Protocol Buffer 序列化原理大揭秘 - 为什么Protocol Buffer性能这么好?

    二进制串 对于C++,因为具有内存操作符,所以 二进制串 容易理解:C++的字符串可以直接被传输层使用,因为其本质上就是以 '\0' 结尾的存储在内存中的二进制串 对于 Java,二进制串 = 字节数组...优点 从上图可知,T - L - V 存储方式的优点是 不需要分隔符 就能 分隔开字段,减少了 分隔符 的使用 各字段 存储得非常紧凑,存储空间利用率非常高 若 字段没有被设置字段值,那么该字段在序列化时的数据中是完全不存在的...{ required int32 id1 = 1; required int32 id2 = 2; } // 在代码中给id1 附上1个字段值:296 // 在代码中给id2 附上1个字段值:296...str设置为:testing // 将Test2中的字段id1设置为:296 // 编码后的字节为:10 ,12 ,18,7,116, 101, 115, 116, 105, 110, 103,16,-...如果Field_Number>16时,Field_Number的编码就会占用2个字节,那么Tag在编码时也就会占用更多的字节;如果将字段标识号定义为连续递增的数值,将获得更好的编码和解码性能 建议3:若需要使用的字段值出现负数

    7.7K61

    内存编织技术,JVM对内存的又一次压榨

    如果你想知道怎么访问对象实例属性的底层原理,就得知道是如何存储的。存储搞明白了,访问就是一句话的事。而想搞明白存储,恰恰不是一件简单的事情。JVM中对象实例属性的存储甚至比原生的C++对象还要复杂。...C++中的实例属性存储 对比学习效果更佳!...先来看看C++中的实例属性是如何存储的,上代码 图片 这段代码生成的对象在内存中长这个样子,占用16B,浪费了2B 如果我把代码改一下,int移到long的下方,又完全不一样了。...JVM中的实例属性存储 说完了C++的对象内存模型,再来说说JVM的对象内存模型,两句话: 1、创建对象进行属性编织时,按照8字节、4字节、2字节、1字节、指针的顺序进行编织。...这时候就要找到对象的类信息,找到类信息中存储的属性表,然后才能完成取值。上伪代码 图片 思考题 数组对象的大小,其实在编译时是可以确定下来的,为什么要等到运行时动态计算出来?

    35920

    MySQL 简单查询语句执行过程分析(四)WHERE 条件

    二)查询准备阶段 MySQL 简单查询语句执行过程分析(三)从 InnoDB 读数据 今天我们分为 3 个部分来介绍,首先会看一下 where 条件在源码中的结构是什么样的,对 where 条件结构有了初步了解之后...三种特殊类型字段怎么比较? 3.1 set 字段 set 类型的字段在 InnoDB 中以整数存储,字段返回给 server 层时也是整数,定义表结构时指定的每一个选项占用 1 bit。...在语法分析阶段,find_in_set('金星', s1) 中的金星就被解析成选项对应的整数值 1 16 = 65536,然后和存储引擎返回的整数值进行按位与(2163720 & 65536 =...3.3 bit 字段 bit 类型的字段,存储引擎以 C/C++ 中的 char 指针指向一块内存区域的形式,把字段内容返回给 server 层,server 层会把 char 指针指向的内存区域的内容转换为...字段的内容进行类型转换,而是直接和二进制 b'11011100' 进行相等比较,但实际上,server 层会把存储引擎返回的 bit1 字段的内容转换为浮点数,并且也会把 where 条件中的二进制

    2.4K30

    MySQL的varchar水真的太深了——InnoDB记录存储结构

    InnoDB是一个将表中的数据存储到磁盘上的存储引擎。 ◆ 2. InnoDB是如何读写数据的?   ...注意:innodb_page_size变量在服务器运行过程中不可以更改,只能在第一次初始化MySQL数据目录时指定。所以页在运行时的大小不可更改。...——变长字段长度列表   一些变长的数据类型,比如VARCHAR(M)、各种TEXT类型,各种BLOB类型,变长数据类型的字段中存储多少字节的数据是不固定的,在存储真实数据的时候需要把这些数据占用的字节数也存起来...实际业务开发中,几乎没有不使用varchar的,所以实际开发中的记录都会有变长字段长度列表部分 3.4 记录为NULL,innodb如何处理?——NULL值列表   能仔细看到这里,你肯定是个高手了。...如果表中没有允许存储 NULL 的列,则 NULL值列表也不存在了,否则将每个允许存储NULL的列对应一个二进制位,二进制位按照列的顺序逆序排列。

    2.1K30

    深入理解CC++中的指针

    在不考虑cpu缓存的情况下,计算机运行程序本质上就是对内存中的数据的操作,通俗地来说,就是将内存条某些部分的数据搬进搬出或者搬来搬去,其中“搬进搬出”是指将内存中的二进制数据搬入cpu寄存器及运算器中进行相应的加减运算或者将寄存器中的数据搬回内存单元中...pb中存储的都是地址,而且都是32位的二进制地址;再者,因为存储这样的地址需要4个字节,所以无论是int型指针变量pa或者是double 型指针变量pb,它们所占的内存大小都是四个字节,从这点来说...上面介绍的是指针变量的一个方面,指针变量还有另外一层含义:在C/C++中星号(*)被定义成取内容符号,虽然所有指针变量占的内存大小和存储的内存地址大小都是一样的,但是由于存储的只是数据的内存首地址,所以指针变量存储的内存地址所指向的数据类型决定着如何解析这个首地址...由于结构体s1中存在字节对齐现象(以sizeof(double) = 8个字节对齐),所以s1占据24字节内存,而s2只占16个字节。...知道这点,我们平常在设计结构体字段的时候,就可以合理安排字段顺序来使用更少的内存空间了。 函数指针   函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。

    1K10

    盛算信息-面试经历-面试部分-完整题目(二)

    哈希表是一种根据键直接访问值的数据结构,通过将键映射到数组的索引来实现快速的查找。 哈希表使用哈希函数将键转换为数组索引,然后将值存储在该索引位置。...7.讲解c++中如果要自己做一个vector那些成员是必须的 数据存储:需要使用一个动态分配的数组来存储元素。可以使用指针或者智能指针来管理数组的内存。...Hash(哈希): 键值对的无序散列表,类似于关联数组。 可以添加、获取、删除单个字段,也可以获取所有字段。 适合存储对象,可以按需更新和查询字段。...索引:MySQL使用B+树索引来加速数据的检索。索引是在表上创建的,它包含了索引列的值和指向对应数据行的指针。B+树索引的结构使得数据在索引中的存储是有序的,可以有效地支持范围查询和排序操作。...知识扩展:Java中是如何实现上面的功能的 在Java中其实和c++是一样的,Java就是c++写的,实现类似的功能需要使用关键字 override 和 super。

    4900

    linux 编译汇编,linux下的汇编教程

    linux下的汇编教程 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。...(11).hword {,} … 插入一个16-bit的数据队列。(与armasm中的DCW相同) 八....编译工具 1.编辑工具介绍 GNU提供的编译工具包括汇编器as、C编译器gcc、C++编译器g++、连接器ld和二进制转换工具objcopy。...GNU工具的开发流程如下:编写C、C++语言或汇编源程序,用gcc或g++生成目标文件,编写连接脚本文件,用连接器生成最终目标文件(elf格式),用二进制转换工具生成可下载的二进制代码。...(1)编写C、C++语言或汇编源程序 通常汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作ARM的协处理器等。初始化完成后就可以跳转到C代码执行。

    3.5K31

    # MySQL server 层和存储引擎层是怎么交互数据的?

    原理说明 在源码里,数据库中的每个表都会对应 TABLE 类的一个实例,实例中有个 record 属性,record 属性是一个有着 2 个元素的数组,server 层每次调用引擎层的方法读取数据时,都会用...当我们第一次查询某个表的时候,MySQL 会从 frm 文件中读取字段、索引等信息,以及刚刚提到的字段 Offset 、一条记录的最大长度。...这里的 char 是指的 C/C++ 里的 char,不是指的 MySQL 的 char 类型。...blob 类型的字段,最多可以存储 2 ^ 16 = 65536 字节 = 64K。...decimal 类型的字段,在存储引擎中是用二进制存储的,在创建表的时候,就计算出来了需要用几字节来存储。 存储引擎读取 d1 字段的内容之后,把内容写入 ptr 属性指向的内存空间。

    1.3K30

    MySQL全面的在线文档

    在MySQL企业版中,线程池插件通过有效地管理大量客户端连接的语句执行线程来提高服务器性能。...安装 Using the MySQL Yum Repository Yum存储库安装手册。MySQL Yum存储库提供了用于在Linux平台上安装MySQL服务器、客户端和其他组件的RPM包。...Using the MySQL SLES Repository 使用MySQL SLES存储库在SUSE Linux Enterprise Server (SLES)上安装和升级MySQL的用户指南。...涉及的应用程序接口包括低级c++语言的NDB AP、用于与NDB集群管理服务器通信和控制的C语言MGM API、以及用于Java的MySQL NDB集群连接器。...X DevAPI将文档存储在集合中,并有专门的CRUD操作集,使用现有的域对象或根据严格类型语言的结构定义生成代码通过CRUD操作使用文档。

    2.1K40

    protobuf 序列化和反序列化

    它使用二进制格式来编码数据,以提高传输效率和数据压缩比。 在protobuf中,我们可以使用.proto文件来定义消息类型,并使用编译器生成针对各种编程语言的序列化和反序列化代码。...编写应用程序:编写应用程序,创建消息对象并填充字段。 序列化数据:使用protobuf库,将消息对象序列化为字节数组。 传输数据:将字节数组发送给接收方。...反序列化数据:接收方使用protobuf库,将字节数组反序列化为消息对象,并访问其中的字段。 在序列化过程中,protobuf使用压缩技术来减小数据的大小,从而提高传输效率。...数组 json对象 注意事项: 在一个文件中只能存储一个大的数组或者对象, 但是可以嵌套使用 原素和原始之间使用逗号间隔(一个键值对视为一个元素) 最后一个元素后边没有逗号 { "lilii...这使得我们能够在一个字段中存储多个相关的数据,而无需定义多个独立的字段。

    58810
    领券