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

MYSQL奇怪问题:varchar与数值比较

其中比较重要一个条件就是 「where xx!=0」。说是很奇怪,为什么!=0就查询结果就是10条。但是!=1 查询出来结果就是100条。...简单考虑了一下,字段类型为 varchar型,而查询条件给予是个数值型,那么问题应该就是出现在这里。 数据库在基于查询条件进行检索时候会如何进行操作呢? 答案就是转换成相同类型。...那么对于这次问题是字段转换成int类型还是int转换varchar类型呢?其实简单看查询结果就知道了。如果查询条件‘0’转换成了varchar那么就应该获取到全部数据。...从结果上我们可以看到 app 转换之后结果只有 0123asfj 转换成了123,其他都是0。所以在查询条件为 ‘!=0’ 时候就只能查询一条结果。...结论 mysql在使用varchar字段查询条件是int类型时候会把varchar型首先转换为int型进行查询。所以就会出现查询结果与预期不符情况。

3.2K10

故障分析 | MySQL 扩展 VARCHAR 长度遭遇问题总结

本文就来总结一下 扩展 VARCHAR 长度可能会遇到一些问题,以及我们给出解决方案,仅供参考。 仅讨论 MySQL 5.7 及以后版本。...在测试这个问题时候发现一个现象:not null null 可以使用 inplace 算法,但是需要 copy 数据;null not null 不能使用 inplace,请看下面的用例: -...这个问题排查了很久都没什么眉目,反反复复查阅文档及测试,始终都认为这个需求一定是满足快速改表方案。实在是想不明白到底是哪里问题,还一度认为是 MySQL Bug。...重建前状态 业务从 varchar(300) 扩展 varchar(500),其他属性没变更。...避免因为 timeout 异常导致终止信号没有给 MySQL,这种可能会引发一系列问题,切记切记。 以上,仅供参考。 本文关键字:#MySQL# #DDL# #VARCHAR#

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

varchar与char转换_character with byte sequence

MySQL 根据情况甚至会将列从一种类型转换为另一种类型。这样做原因如下: ■ 行定长表比行可变长表容易处理(其理由请参阅2 . 3节“选择列类型”)。...所以为了节省存储空间,在这种情况 下最好也将定长列转换为可变长列。 这表示,如果表中有VARCHAR 列,那么表中不可能同时有CHAR 列;MySQL 会自动 地将它们转换VARCHAR 列。...Type Null Key Default Extra c1 varchar(10) yes null c2 varchar(10) yes null 请注意,VARCHAR出现使MySQL 将...c1 也转换成了VARCHAR 类型。...将VARCHAR转换为CHAR 惟一办 法是同时转换表中所有VARCHAR 列: ALTER TABLE my_table MODIFY c1 CHAR(10),MODIFY c2 CHAR(10

1.3K30

【译】MySQL char、varchar区别

例如char(30)和varchar(30),这意味着这些数据类型字段最多可以容纳30个字符。 对于CHAR,此长度可以是从0255之间任何值,对于VARCHAR可以是从065,535。...VARCHAR另一件事是,如果数据小于255个字符,则使用1个字节,对于大于255个字符数据,则占用2个字节作为长度前缀 对于这两种数据类型,如果传递数据大于指定长度,MySQL将截断数据以适应创建表时指定长度...VARCHAR 只会存储您通过查询数据,如CHAR,它不会对数据执行任何空间删除过程。 CHAR或VARCHAR? 所以现在问题是,哪一个使用?使用这些数据类型完全取决于需要。...使用VARCHAR,它必须读取第一个记录前缀以知道第二个开始哪个字节,等等。 只有CHAR,MySQL知道每个记录是x字节长,因此第10个记录是在10 * x字节文件。...原文:http://www.xpertdeveloper.com/2011/12/char-varchar-in-mysql/

2.2K90

MySQLCHAR和VARCHAR类型

CHAR和VARCHAR类型类似,都用来存储字符串,但他们保存和检索方式不用。CHAR属于固定长度字符类型,而VARCHAR属于可变长度字符类型。...注意表8-1中最后一行值只适合MySQL运行在非“严格模式”时,如果MySQL运行在严格模式,超过列长度值将不会保存,并且会出现错误提示, 从CHAR(4)和VARCHAR(4)列检索值并不总是相同...另外,随着MySQL版本不断升级,VARCHAR数据类型性能也在不断改进并提高,所以在许多应用中,VARCHAR类型被更多地使用。...在MySQL中,不同存储引擎对CHAR和VARCHAR使用原则有所不同。...由于CHAR平均占用空间多于VARCHAR,因此使用VARCHAR来最小化需要处理数据行存储总量和磁盘I/O是比较好

2.3K40

MySQL CHAR 和 VARCHAR 区别

MySQL 中,CHAR 和 VARCHAR 是两种不同文本数据类型,CHAR 和 VARCHAR 类型声明时需要指定一个长度,该长度指示您希望存储最大字符数。...1.区别 根据 MySQL 官方文档 The CHAR and VARCHAR Types 中描述, varchar和char区别主要有: 1.1 存储方式不同 char(N) 定长存储。...下表通过显示将各种字符串值存储 CHAR(4) 和 VARCHAR(4) 列中结果来说明 CHAR 和 VARCHAR 之间区别(假设该列使用单字节字符集,如 latin1)。...varchar 最大长度为 65,535 字节,注意 varchar 最大长度是字节,因为该上限为行最大长度。...参考文献 11.3.2 The CHAR and VARCHAR Types - mysql.com Section 5.1.11 Server SQL Modes MySQL中char与varchar

32140

mysqlvarchar_从数据类型varchar转化为

MySQL数据类型varchar详解 更新时间:2014年03月17日 11:10:11 作者: 这篇文章详细介绍了MySQL数据类型varchar,探讨varchar到底能存多长数据、InnoDB...和MyISAM中varchar问题,需要朋友可以参考下 1、varchar(N)逻辑意义从MySQL4.1开始,varchar (N)中N指的是该字段最多能存储多少个字符(characters...3、varchar物理存储 在物理存储上,varchar使用12个额外字节表示实际存储字符串长度(bytes)。如果列最大长度小于256个字节,用一个字节表示(标识)。...5、MyISAM中varchar 对于MyISAM引擎,varchar字段所有数据存储在数据行内(in-line)。myisam表row_format也影响varchar物理存储行为。...之间发生转换时候,varchar字段物理存储方式也将会发生变化。

1.4K30

MySQL 总结char与varchar区别

专栏持续更新中:MySQL详解 MySQL手册中有提到:CHAR和VARCHAR类型类似,但它们保存和检索方式不同。...它们最大长度以及是否保留尾部空格等方面也不同,在存储或检索过程中不进行大小写转换 用户定义数据时,char和varchar类型长度表示想保存最大字符数,其中char(M)定义长度为固定,M取值可以...当检索char值时,尾部空格被删除掉。在存储或检索过程中不进行大小写转换,char存储定长数据很方便,char字段上索引效率很高。...,检索时char类型后空格被删掉,而不会删除varchar类型后空格 在MySQL数据库中,用最多字符型数据类型就是VARCHAR和CHAR。...所以如果某些字段会涉及文件排序或者基于磁盘临时表时,分配VARCHAR数据类型时仍然不能够太过于慷慨。还是要评估实际需要长度,然后选择一个最长字段来设置字符长度。

20040

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

Spring Boot 枚举类型自动转换

1、Spring Boot 枚举类型自动转换需求:一般我们在数据库都会定义数值型枚举常量,不管是序列化还是反序列化都是需要我们手动去转换枚举类型,既然这样我们能不能让它们自动转换呢?...JSON 字符串类型,那么 Jackson 默认是根据下标进行转换,和我们根据匹配值获取相应枚举不符,所以进行以下更改:添加枚举反序列化处理器@Data@EqualsAndHashCode(callSuper...1.3、添加自定义枚举序列化接下来我们就要解决如何将数据库中数值常量枚举转换成jackson 序列化默认是按照名称序列化,和我们想返回枚举某个值不符,下面我们进行一下小改动:添加序列化处理器public...,数据库中只能存 code 类型是 int 类型,其他类型转换会报错 * 当然可以自己扩展以下处理,判断相应枚举类型然后进行相应处理 * @author rookie */public class...", var3); } }}因为我们先一步是让数据库中常量能转换枚举类型,这里我们定义一下 Mybatis plus(我用是plus) 枚举处理器mybatis-plus:

34730

修改MySQL varchar类型字段排序规则

记录一个在工作中遇到问题,也不算是问题,为是找一种简便方法批量修改数据表字段排序规则,在MySQL中叫collation,常常和编码CHARACTER一起出现。...level https://confluence.atlassian.com/display/CONFKB/How+to+Fix+the+Collation+and+Character+Set+of+a+MySQL...那天遇到问题是这样子, Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for...但是我遇到场景是数据表级别已经是utf8_unicode_ci,而字段级别是utf8_general_ci,(这里我们关心字段类型是varchar)。...由于需要修改字段太多了,手工修改肯定是费时费力。自然也想到了用脚本方式批量修改,但是发现这种通过查找MySQL信息表、过滤、拼接生成批量修改语句太好用了,而且还能做到针对varchar类型。

4.6K30

MySQL之char、varchar和text设计

接下来,我们说说这个场景问题: 当varchar(n)后面的n非常大时候我们是使用varchar好,还是text好呢?这是个明显量变引发质变问题。我们从2个方面考虑,第一是空间,第二是性能。...首先从空间方面: 从官方文档中我们可以得知当varchar大于某些数值时候,其会自动转换为text,大概规则如下: 大于varchar(255)变为 tinytext 大于varchar(500)...由于会进行内部转换,所以long varchar其实也只能添加1000字节索引,如果超长了会自动截断。...这是由于innodb自身问题,使用innodb_large_prefix设置。 从索引上看其实long varchar和text也没有太多区别。...(主要考虑text没有默认值问题) CREATE TABLE `test` ( `id` int(11) DEFAULT NULL, `a` varchar(500) DEFAULT NULL

1.7K20

MySQL之char、varchar和text设计

接下来,我们说说这个场景问题: 当varchar(n)后面的n非常大时候我们是使用varchar好,还是text好呢?这是个明显量变引发质变问题。我们从2个方面考虑,第一是空间,第二是性能。...首先从空间方面: 从官方文档中我们可以得知当varchar大于某些数值时候,其会自动转换为text,大概规则如下: 大于varchar(255)变为 tinytext 大于varchar(500)...由于会进行内部转换,所以long varchar其实也只能添加1000字节索引,如果超长了会自动截断。...这是由于innodb自身问题,使用innodb_large_prefix设置。 从索引上看其实long varchar和text也没有太多区别。...(主要考虑text没有默认值问题) CREATE TABLE `test` ( `id` int(11) DEFAULT NULL, `a` varchar(500) DEFAULT NULL

3.9K41

Java进阶笔记——MySqlvarchar类型

MySqlvarchar类型资料收集整理如下。...1.varchar类型变化 MySQL 数据库varchar类型在4.1以下版本中最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。...存储限制 varchar 字段是将实际内容单独存储在聚簇索引之外,内容开头用12个字节表示实际长度(长度超过255时需要2个字节),因此最大长度不能超过65535。...当检索CHAR值时,尾部空格被删除掉。在存储或检索过程中不进行大小写转换。...4.总结char,varchar,text区别 长度区别,char范围是0~255,varchar最长是64k,但是注意这里64k是整个row长度,要考虑其它column,还有如果存在not

2.2K30

【说站】mysql char和varchar比较

mysql char和varchar比较 1、相同点,char(n),varchar(n)中n代表字符数。超过长度n限制后,字符串将被切断。...2、不同点,char都会占用n个字符空间,varchar只会占用实际字符应占用字节空间加1。...在存储过程中,char会切断尾部空格,而varchar不会。 char是一种适用于存储较短、一般固定长度字符串。举例来说,char非常适合存储密码MD5值,因为它是一个固定长度值。...在非常短列中,char比varchar更高效地存储空间。 以上就是mysql char和varchar比较,希望对大家有所帮助。...更多mysql学习指路:MySQL 推荐操作系统:windows7系统、mysql5.8、DELL G3电脑 收藏 | 0点赞 | 0打赏

72530

MySQL中char、varchar和text设计

接下来,我们说说这个场景问题: 当varchar(n)后面的n非常大时候我们是使用varchar好,还是text好呢?这是个明显量变引发质变问题。我们从2个方面考虑,第一是空间,第二是性能。...首先从空间方面: 从官方文档中我们可以得知当varchar大于某些数值时候,其会自动转换为text,大概规则如下: 大于varchar(255)变为 tinytext 大于varchar(500)变为...由于会进行内部转换,所以long varchar其实也只能添加1000字节索引,如果超长了会自动截断。...这是由于innodb自身问题,使用innodb_large_prefix设置。 从索引上看其实long varchar和text也没有太多区别。...(主要考虑text没有默认值问题) CREATE TABLE `test` ( `id` int(11) DEFAULT NULL, `a` varchar(500) DEFAULT NULL

2.1K10

MySQL中char、varchar和text区别

它们存储方式和数据检索方式都不一样。 数据检索效率是:char > varchar > text 空间占用方面,就要具体情况具体分析了。...2.varchar:存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部空格仍会保留。...另外,varchar类型实际长度是它实际长度+1,这一个字节用于保存实际使用了多大长度。 3.text:存储可变长度非Unicode数据,最大长度为2^31-1个字符。...text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用,意思就是你插入数据时候,超过你指定长度还是可以正常插入。...结论: 经常变化字段用varchar; 知道固定长度用char; 尽量用varchar; 超过255字节只能用varchar或者text; 能用varchar地方不用

1.9K10

MySQL中char、varchar和text区别

它们存储方式和数据检索方式都不一样。 数据检索效率是:char > varchar > text 空间占用方面,就要具体情况具体分析了。...2.varchar:存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部空格仍会保留。...另外,varchar类型实际长度是它实际长度+1,这一个字节用于保存实际使用了多大长度。 3.text:存储可变长度非Unicode数据,最大长度为2^31-1个字符。...text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用,意思就是你插入数据时候,超过你指定长度还是可以正常插入。...---- 结论: 经常变化字段用varchar; 知道固定长度用char; 尽量用varchar; 超过255字节只能用varchar或者text; 能用varchar地方不用text; 能够用数字类型字段尽量选择数字类型而不用字符串类型

1.3K40
领券