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

C语言中char类型的数据范围陷阱

基础概念 1.char类型是什么 char类型是也是属于整形。 因为char类型存储字符信息是通过存储对应的ASCII值来进行存储。而ASCII的值就是整数类型。...2.char类型的取值范围 char类型的存储大小只有一个字节,即8bite(8位二进制数)。整型家族里都有 signed(有符号数) 和 unsigned(无符号数)两种类型。...所以signed char 的取值范围:-128~127;(注:1000 0000 默认值位-128) unsigned char 的取值范围是:0 ~ 255 ; 代码实例演示 下图的strlen...return 0; } 运行结果 结果是 255 很多人可能会好奇,上述内容我提到默认的char类型的默认类型是signed (有符号数)类型。其存储的数据范围是 -128~127 。...这就是char类型存储的一个 陷阱 char类型的陷阱的解释 在上面的测试中我们已经明白了char类型在计算机的存储过程中并不是按照数学意义上的从大到小的顺序进行存储,而是按照下图所示的方式进行存储。

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

    深入 char * ,char ** ,char a ,char *a[] 内核

    char *  与 char  a[ ];        char  *s;        char  a[ ] ;        前面说到 a代表字符串的首地址,而s 这个指针也保存字符串的地址...用一句话来概括,就是 char *s 只是一个保存字符串首地址的指针变量, char a[ ] 是许多连续的内存单元,单元中的元素为char ,之所以用 char *能达到  char a  [ ]...但是,char* 和 char a[ ] 的本质属性是不一样的。。     ...6      char **  与char  * a[ ] ;             先看 char  *a [ ] ;             由于[ ] 的优先级高于* 所以a先和 [ ]结合...char **s;        char **为二级指针, s保存一级指针 char *的地址,关于二级指针就在这里不详细讨论了 ,简单的说一下二级指针的易错点。

    2.9K20

    MySQL 中 varchar 和 char 区别

    1. varchar 和 char 共同点 ---- varchar 和 charMySQL 中的两种数据类型,都是用来存储字符串的。...2. varchar 和 char 区别 ---- 一、长度是否可变 varchar 类型的长度是可变的,而 char 类型的长度是固定的 char 类型是一个定长的字段,以 char(10) 为例,不管真实的存储内容多大或者是占了多少空间...,都会消耗掉 10 个字符的空间 坦通俗来讲,当定义为 char(10) 时,即使插入的内容是 'abc' 3 个字符,它依然会占用 10 个字节,其中包含了 7 个空字节 二、存储长度 char 长度最大为...255 个字符,varchar 长度最大为 65535 个字符 三、检索效率方面 varchar 类型的查找效率比较低,而 char 类型的查找效率比较高 3. varchar 和 char 的选择...使用场景:使用 md5 加密的密码长度固定为 32 位字符 总结: 可变长度使用 varchar,固定长度使用 char

    1.6K30

    【译】MySQL char、varchar的区别

    VARCHAR的另一件事是,如果数据小于255个字符,则使用1个字节,对于大于255个字符的数据,则占用2个字节作为长度前缀 对于这两种数据类型,如果传递的数据大于指定的长度,MySQL将截断数据以适应创建表时指定的长度...但是如果你想限制数据的截断,你应该在MySQL中启用严格模式。所以它会为查询生成错误。...想象一下,MySQL想要检索集合的第10个记录。 使用VARCHAR,它必须读取第一个记录的前缀以知道第二个开始的哪个字节,等等。...只有CHARMySQL知道每个记录是x字节长,因此第10个记录是在10 * x字节文件。 因此,使用大型事实表时,只使用CHAR类型是一个很好的做法。 它可以大大减少您的I / O。...原文:http://www.xpertdeveloper.com/2011/12/char-varchar-in-mysql/

    2.2K90

    MySQL加锁范围分析

    寻找答案: 带着这样的疑问,先查阅了mysql官方文档关于MySQL锁的章节,InnoDB本身支持3种锁: Record Locks:锁住表中的某一条记录 Gap Locks:锁住某个范围 Next-key...更进一步,问题(2): 解决了上述index_id=5时,(4,4)记录插不进去的问题之后,为了验证官方文档上所说的锁范围,我进一步做了如下实验: mysql> select * from index_test...然后在网上搜索相关的资料,看看别人有没有遇到过这样的问题,在一篇关于MySQL加锁处理分析的blog中得到了启示,按照blog中组合七:id非唯一索引+RR的理论,gap锁的范围不仅跟被锁定的键有关,还跟主键有关...按照该blog中的理论:上述client1中gap锁的范围应该如下图所示: [6608848834725035442.jpg] 即当执行: mysql> select * from index_test...因此,在我们使用mysql加锁过程中,也首先需要搞清楚,我们的隔离级别是什么,是否开启了binlog等等,然后才能正确分析加锁的范围

    6.1K72

    MySQLCHAR和VARCHAR类型

    CHAR和VARCHAR类型类似,都用来存储字符串,但他们保存和检索的方式不用。CHAR属于固定长度的字符类型,而VARCHAR属于可变长度的字符类型。...表8-1显示了将各种字符串值保存到CHAR(4)和VARCHAR(4)列后的结果,说明了CHAR和VARCHAR之间的差别。 ?...注意表8-1中最后一行的值只适合MySQL运行在非“严格模式”时,如果MySQL运行在严格模式,超过列长度的值将不会保存,并且会出现错误提示, 从CHAR(4)和VARCHAR(4)列检索的值并不总是相同...另外,随着MySQL版本的不断升级,VARCHAR数据类型的性能也在不断改进并提高,所以在许多的应用中,VARCHAR类型被更多地使用。...在MySQL中,不同的存储引擎对CHAR和VARCHAR的使用原则有所不同。

    2.4K40

    MySQL 总结char与varchar的区别

    专栏持续更新中:MySQL详解 MySQL手册中有提到:CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。...当检索到char值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换,char存储定长数据很方便,char字段上的索引效率很高。...varchar(M)定义的列的长度是可变长度字符串,在MySQL5.0以上的版本中,varchar的数据类型长度支持到了65535,因为起始位和结束位占去了3个字节,所以其用于存储数据的最大长度为65532...,检索时char类型后的空格被删掉,而不会删除varchar类型后的空格 在MySQL数据库中,用的最多的字符型数据类型就是VARCHAR和CHAR。...而CHAR则不管实际存储数据的长度,都是根据规定的长度来分配存储空间。这是否意味着CHAR的数据类型劣于VARCHAR呢?其实不然。否则的话,就没有必要存在CHAR字符类型了。

    24640

    mysql char与varchar类型的区别

    image.png 基本区别 char 是固定长度的,varchar 是可变长度的 char 如果某个长度小于M,MySQL就会在它的右边用空格补足,使长度达到M varchar 每个值只占用刚好够用的字节...char 的最大长度是 255 个字符(注意 不是字节) varchar 的最大长度是 65535 个字节(注意 不是字符) 定义字段时,char(n) 或 varchar(n) 中的 n 是指字符数...当使用utf8编码时,一个字符占3个字节 因为char是定义字符数,所以可以定义 char(255),而不能定义 varchar(65535),因为varchar的最大长度是65535个字节,那么最大长度不能超过...21845个字符,mysql utf8编码下 varchar的最大长度实测为21589 适用场景 char 不需计算,占空间 varchar 需计算,省空间 char 适应于长度短、长度相对固定的字段,...例如邮编、UUID,还有频繁改变内容的列,因为省去了char不需要频繁计算内容长度

    1.8K50

    MySQLchar、varchar类型简析

    MySQL中的varchar、char类型详解 我们都知道,MySQL中关于字符,有char和varchar两种常用的类型,可能在平时的使用过程中,大家不会去关心这两种类型的区别,只是会用就可以了,或者说看到过一些它们的区别...答案是10个,后面缺少的2个字符,MySQL会自动补充为空值,然后进行存放。在取这个记录的时候,char类型的会使用trim()函数去掉多余的空格,所以我们看到的还是8个字符的记录。...当输入的字符长度大于最大的长度时,MySQL会自动报错。...然后我们使用mysql里面的concat函数进行字符连接,给每条记录的左右分别添加小括号, ? 此时我们可以看到,d_char的ab后面的空格被取消掉了,而d_varchar后面的空格还依旧存在。...所以,char类型的长度取值范围为0~255个字符 上面提到了varchar的最大实际长度由最大的行的大小和使用的字符集确定,这里我们进行实验: ?

    2.9K30

    详解MySQL中MRR(多范围读取)如何优化范围查询

    一、MRR优化概述 MRR,全称Multi-Range Read Optimization,直译为多范围读取优化,是MySQL中一种用于提高索引查询性能的技术。...三、MRR优化的原理 MRR优化的核心思想是将多个范围查询中的随机磁盘I/O转换为顺序磁盘I/O,从而提高查询性能。...扫描辅助索引并收集主键值: 当执行一个包含范围条件的查询时,MySQL优化器首先会扫描辅助索引,找到满足条件的一系列索引元组。 对于每个索引元组,MySQL会收集其对应的主键值(rowid)。...七、使用场景、条件与监控 MRR优化适用于基于范围扫描和等值连接的操作中尤为有效。但是,并非所有查询都能从MRR优化中受益。...收集并排序主键值: MySQL会收集这些索引元组对应的主键值,并将它们放入一个内存缓冲区(read_rnd_buffer)中。 当缓冲区满或查询结束时,MySQL会对这些主键值进行排序。

    32410
    领券