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

mysql字符串等值查询中条件字段值末尾有空格也能查到数据问题

,name字段值分别是:不带空格的duduu、带一个空格的duduu、带两个空格的duduu,且空格都是加在了尾部。...二、合理推测 通过上面的实验,明明是三个长度不同的字符串,空格放在前边被认为是不同,放在后边又被认为是相同,难道说:对于MySQL来说,字符串做字符串等值判断时会忽略后面的空格,duduu(不带空格)、...既然MySQL认为这三个字符串是一个,那么我们看看给name增加唯一索引时,插入这几条数据会不会报错。...,MySQl认为duduu(不带空格)、duduu(后面带一个空格)、duduu(后面带两个空格)是重复的三个字符串,后面两条数据由于违背了唯一性,因而不可以被插入,我们去官方文档看看有没有提及这一点。...三、权威文档 官方文档链接:https://dev.mysql.com/doc/refman/5.7/en/char.html有提到这样的描述: MySQL的校对规则基于PAD SPACE,这就意味着

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

    易犯的PHP小错误及相应分析

    因为编译器未找到一个匹配的大括号,就会报告文件末尾处有错误。 如果正确地反映了代码的层次结构,错误信息就会变得非常明显。否则,代码调试起来就会非常的困难。...上面所报告有错的一行可能是: while($row = mysql_fetch_array($result)) {} 参数 $result并不是一个有效的资源,因为查询失败,将无法处理mysql_fetch_array...任一查询的语法无效或者与数据库的连接失败,应该到MySQL 控制台进行测试。 更多易犯的错误 1....注意echo和print的区别 PHP中echo和print都是输出的作用,但是两者之间还是有细微的差别。echo输出后没有返回值,但print有返回值,当其执行失败时返回 flase。...注意空字符串('')和NULL的区别 PHP中空字符串和NULL都是以值为0存储的,但是他们的类型并不一样,前者是string,而后者是NULL,可见字符串('')、NULL值相等但类型不等。

    1.3K70

    MySQL数据类型与优化

    2、CHAR类型适合存储很短的字符串,或者所有值都很接近同一个长度,例如MD5。 3、经常变更的数据,CHAR也比VARCHAR更好,因为定长的CHAR类型不易产生碎片。...4、在MySQL5.0或更高的版本,VARCHAR类型在存储和检索的时候会保留末尾空格,但在4.1或更老的版本,会剔除末尾的空格。而CHAR类型在新老版本都会查询末尾的空格。...其中BLOB是SAMLLBLOB的同义词,TEXT是TINYTEXT的同义词。 3、与其他类型不同,MySQL把每个BLOB和TEXT值当做一个独立的对象处理。存储引擎在存储时通常会特殊处理。...枚举列可以把一些不重复的字符串存储成一个预定义的集合。MySQL在存储枚举时非常紧凑,会根据列表值的数量压缩到一个或两个字节中。...2、应避免使用字符串类型作为标志符,因为它们很消耗空间,并且通常比数字类型慢,有其是在MyISAM表中使用字符串作为标识符要特别小心,MyISAM默认对字符串压缩索引,这会导致查询慢很多。

    1.6K10

    【MySQL笔记】数字类型、时间和日期类型、字符串类型

    MySQL数据库提供了多种数据类型,其中包括数字类型、时间和日期类型、字符串类型。...下面我们来看一个案例 创建表进行测试,在表中插入数值。我们会发现,当插入的小数部分超出范围时,会四舍五入,当插入的小数部分四舍五入导致整数部分进位时,会插入失败。...因为字符串格式的’0’表示YEAR值是2000,而数字格式的0表示的YEAR值是0000。...ENUM类型 ENUM类型又称为枚举类型,定义ENUM类型方式如下所示: ENUM(‘值1’,‘值2’,‘值3’,…,‘值n’) 在MySQL中,枚举列表最多可以有65535个值,每个值都有一个顺序编号...BLOB查询时区分大小写 JSON数据类型 MySQL从5.7.8版本开始提供了JSON数据类型。JSON是一种轻量级的数据交换格式,有JavaScript语言发展而来,其本质是一个字符串。

    4.1K20

    有一个整数数组,长度为9,数组里的值是多少不清楚,但是知道数组中有8个值是相等,其中一个小于其他8个值,目前有一个标准函数,compare(int b),返回0相等1大于

    最近做的一个面试题: 有一个整数数组,长度为9,数组里的值是多少不清楚,但是知道数组中有8个值是相等,其中一个小于其他8个值,目前有一个标准函数,compare(int[] a, int[] b),返回...0(相等)、1(大于)、-1(小于),最少调用compare标准函数几次一定能够找出不同的值,请描述具体步骤,并用代码实现,语言不限 思路: 先分成三组 一组三个。...每一组三个数相加,其中有一组和其他两个组不一样,然后范围就缩小到这一组,就三个数,然后可以再两两相加,然后分析这三数之间的大小,调用两次就行 之间上代码(方法虽笨,可以实现,希望有好的方法指教!!)...int[] c = new int[]{num[6],num[7],num[8]}; int result = compare(a,b); //说明b里有那个数...}else { System.out.println(num[6]); } }else { //说明a里有那个数

    88510

    给定一个长度为n的数组arr, 现在你有一次机会, 将其中连续的K个数全修改成任意一个值

    给定一个长度为n的数组arr, 现在你有一次机会, 将其中连续的K个数全修改成任意一个值, 请你计算如何修改可以使修改后的数 列的最长不下降子序列最长。 请输出这个最长的长度。...rightFn函数的步骤描述: 1.初始化right数组的最后一个元素right[n]为1,表示以最后一个元素为结尾的最长不下降子序列的长度为1。...2.初始化ends数组的第一个元素ends[1]为arr[n],表示以最后一个元素为结尾的最长不下降子序列的最后一个元素为arr[n]。...其中,find表示以arr[i]为结尾的最长不下降子序列的长度,right[i]表示以arr[i]为起点的最长不下降子序列的长度,k表示连续的k个数被修改。...总的时间复杂度为O(n log n),其中n为数组的长度,主要是由二分查找的过程引起的。 总的额外空间复杂度为O(n),主要是由数组的存储引起的。

    23070

    mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索 mysql索引失效,是因为charset不一致导致 mysql索引 适用 字符类型一致

    mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索 那就是主表和从表的关联字段的编码方式不一样!!!...mysql索引失效,是因为charset不一致导致 mysql索引 适用 字符类型一致 产生的现象: 解决之后,正确的使用了t2.order_no ref索引,而不是ALL 检查mysql主体编码方式,...是否由于后来新建的表的关联字段和之前的主表的字段的编码方式不一样 改成一样的编码方式以后就ok了 #可以通过以下排查解决: #查看数据库编码格式 SHOW VARIABLES LIKE 'character_set_database...CHANGE order_no order_no VARCHAR(32) CHARACTER SET utf8mb4 NOT NULL; utf8_general_ci utf8mb4_general_ci MySQL...索引 #t1仍然是ALL,因为where条件也跟它无关,且order是大表,主要查询业务的数据作为主表,其他的作为从表。

    10110

    MySQL性能优化(二):选择优化的数据类型

    如果查询中的字段值恰巧是设置的NULL值,对MySQl来说更难优化,因为可为NULL的字段使得索引、值比较都更复杂。 NULL值不能进行索引,影响索引的统计信息,影响优化器的判断。...当数据类型为CHAR时,MySQL会删除所有的末尾空格。 CHAR类型适合存储很短的字符串,或者所有值都接近同一个长度。例如,CHAR类型非常适合存储密码的MD5值,因为这是一个定长的值。...('xcbeyond '); Query OK, 3 rows affected Records: 3 Duplicates: 0 Warnings: 0 奇怪的事情发生了,当我们查询时,会发现第三个字符串末尾的空格被自动截断了...,则字符串末尾的空格是不会被截断的。...2.使用合成索引来提高大文本字段(TEXT、BLOB类型)的查询性能 合成索引,就是根据大文本字段的内容建立一个散列值,并把这个值存储在单独的数据列中,接下来就可以通过检索散列值找到数据行了。

    1.4K00

    在 MySQL 中处理日期和时间(四)

    : 第二个参数可以有毫秒的小数部分: STR_TO_DATE() 函数 创建 DATE、TIME 或 DATETIME 的另一个选项是使用 STR_TO_DATE() 函数。...它接受一个日期字符串和一个格式字符串并返回: 如果字符串仅包含日期,则为 DATE 值 如果字符串仅包含时间,则为 TIME 值 如果格式字符串包含日期和时间部分,则为 DATETIME 值 此外,如果从...以下是几个日期案例: 扫描从 str 的开头开始,如果发现格式不匹配,则扫描失败。...同时,忽略 str 末尾的额外字符: 未指定的日期或时间部分的值为 0,因此日期或时间字符串中未完全指定的值会产生部分或全部部分设置为 0 的结果: 组合 MAKEDATE()、MAKETIME()...和 STR_TO_DATE() 函数 如果我们有两个单独的 DATE 和 TIME 值,我们可以连接 MAKEDATE() 和 MAKETIME() 的结果然后将组合字符串传递给 STR_TO_DATE

    3.8K10

    手 Q 红包工程师过去一年踩过的坑

    其中存在 strcpy、sprintf、strcat、memory leak、野指针等 问题原因:历史遗留 解决方法: 1、改用 snprintf 安全函数,其能够保证标缓冲区末尾为’\0’,故使用 snprintf...因此查询前一个月库表时,实际上会继续查询 4 月份的数据。因此,3 月份的数据永远也不会被覆盖到。若该业务逻辑依靠月表保证重入逻辑,则可能存在严重问题。...2.2 SQL 问题描述:参与过的一些项目中,sql 查询经常会 core,常见的有以下三种: 1、 strncpy(stOrder.recv_name, row[6] : "", sizeof(stOrder.recv_name...5.3 MD5 计算 问题描述:若计算一个字符串"md5test",则使用命令 echo md5test | md5sum | awk '{print $1}',得到 md5 值为 689a850ebe8e2cf48429c9f9879e4300...但是在代码中得到的 md5 值是 82da61aa724b5d149a9c5dc8682c2a45。莫非代码有 bug? 问题原因:使用 echo 时,不加-n 选项,字符串默认会包含\n。

    1.3K00

    细说varchar与char有哪些区别?

    它比固定长度类型更节省空间,因为它仅使用必要的空间(根据实际字符串的长度改变存储空间)。   有一种情况例外,如果MySQL表使用ROW_FORMAT=FIXED创建的话,每一行都会使用定长存储。...当存储CHAR值时,MySQL会删除字符串中的末尾空格(在MySQL 4.1和更老版本中VARCHAR 也是这样实现的——也就是说这些版本中CHAR和VARCHAR在逻辑上是一样的,区别只是在存储格式上...例如,CHAR非常适合存储密码的MD5值,因为这是一个定长的值。对于经常变更的数据,CHAR也比VARCHAR更好,因为定长的CHAR类型不容易产生碎片。...例如用CHAR(1)来存储只有Y和N的值,如果采用单字节字符集只需要一个字节,但是VARCHAR(1)却需要两个字节,因为还有一个记录长度的额外字节。...更长的列会消耗更多的内存,因为MySQL通常会分配固定大小的内存块来保存内部值。

    1.6K40

    Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day14】—— 数据库3

    每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。 TIMESTAMP类型有专有的自动更新特性,将在后面描述。...当存储CHAR值时,MySQL会删除字符串中的末尾空格(在MySQL 4.1和更老版本中VARCHAR 也是这样实现的——也就是说这些版本中CHAR和VARCHAR在逻辑上是一样的,区别只是在存储格式上...例如,CHAR非常适合存储密码的MD5值,因为这是一个定长的值。对于经常变更的数据,CHAR也比VARCHAR更好,因为定长的CHAR类型不容易产生碎片。...更长的列会消耗更多的内存,因为MySQL通常会分配固定大小的内存块来保存内部值。   ...有兴趣的同学可以花几小时尝试破解自己公司的web~~ 3、索引中隐式转换的坑   同理,在MySQL根据索引进行查询时,如果你的username字段有索引且为varchar类型,且查询如下时: select

    1.5K10

    Java高频面试之Mysql篇

    mysql是一个c/s架构的数据库管理系统, 客户端可以是图形化界面,也可以是命令行或者java等程序 服务端由一下组成部分 连接管理器:管理连接,管理线程,验证身份,获取权限 缓存(sql字符串为key...MySQL行默认最大65535字节,是所有列共享(相加)的,所以VARCHAR的最大值受此限制。...更长的列会消耗更多的内存,因为MySQL通常会分配固定大小的内存块来保存内部值。...因为varchar是可变字符串,所以实际存储是一样的,但是在没有从存储引擎拿到数据前,不知道给varchar分配多大的内存,所以会根据定于的长度先分配,所以varchar(20) 可能比varchar(...说一下 MySQL 的行锁和表锁 InnoDB 存储引擎的锁的算法有哪些?

    12310

    Jmeter使用JDBC对数据库压测

    Soft Min Evictable Idle Time(ms) 连接在池中处于空闲状态的最短时间,默认值为5000(5秒) Validation Query 一个简单的查询,用于确定数据库是否仍在响应...Query Type sql语句类型,这里的语句选择的select statement,根据实际测试sql来选择 Query 填写的sql语句,多条语句中间用;分割,语句末尾不加; JDBC Request...要传输的值 Parameter types 传输值的类型 Variable names sql执行结果变量名 Result variable names 所有结果当做一个对象存储 Query timeouts...(s) 查询超时时间 Limit Result Set 限制 sql 语句返回结果集的行数 Handle Result Set 如何定义 callable statements 返回的结果集;默认是存储为字符串...如果出现请求失败的或者结果返回不符合预期,需要重新调整脚本或者SQL语句。

    2.9K50

    【重学 MySQL】十七、比较运算符的使用

    示例 假设我们有一个名为orders的表,其中包含order_id、order_date和amount等列。...., valueN); 示例 假设你有一个名为employees的表,其中有一个名为department_id的列,你想要查询ID为1、2或3的部门的所有员工,你可以这样写: SELECT * FROM...MySQL 通配符 在MySQL中,通配符主要用于LIKE操作符中,以匹配字符串中的特定模式。最常见的通配符有两个:%(百分号)和_(下划线)。 %(百分号) %通配符代表零个、一个或多个字符。...示例 假设你有一个名为products的表,其中有一个名为description的列,你想要找到描述中包含100%的产品。...同样,$是一个特殊字符,它匹配字符串的末尾。 正则表达式功能 MySQL的正则表达式功能相当强大,支持多种元字符和模式修饰符。以下是一些常用的正则表达式元字符: . 匹配除换行符之外的任何单个字符。

    20610

    MySQL 8.0.24 发布

    如果子查询已经具有显式分组,则MySQL会将额外的分组添加到现有分组列表的末尾。 MySQL执行基数检查,以确保子查询返回的行不超过一行,ER_SUBQUERY_NO_1_ROW如果返回则进行查询 。...ESCAPE,其中 ESCAPE并没有提及一个恒定值,未正确一份声明中进行处理。...当前两个参数之一LIKE是使用多字节字符集的字符串时,可能会出现问题,因为在这种情况下,空值被解释为意味着反斜杠(\)应该用作转义字符,从而破坏了预期的行为。...转换例程my_gcvt用于确定是否使用科学计数法的启发式方法 有时会生成比这些更长的字符串。 这些长字符串给某些字符串转换例程带来了问题,因为它们的实际长度可能会超出预期的最大值。...在优化ORDER BY子查询的子句时,有可能清除在外部引用的子查询树SELECT,这可能导致过早退出。(缺陷#31721430) mysql.func系统表中 名称的格式错误可能会导致服务器意外行为。

    3.7K20

    Mysql 5.6 “隐式转换”导致的索引失效和数据不准确

    背景 在一次进行SQl查询时,我试着对where条件中vachar类型的字段去掉单引号查询,这个时候发现这条本应该很快的语句竟然很慢。这个varchar字段有一个复合索引。...其中的总条数有58989,甚至不加单引号查出来的数据不是我们想要的数据。 使用的是mysql 5.6版本,innoDB引擎 实际情况如下 下面我们来看一下执行的结果 ?...不加单引号也就代表这是一个字符串之外的类型,如int,bigDecimal类型等 如果给一串有字幕和特殊符号的字符串不加单引号,后果就是类型转换失败导致SQl不能执行。...,会按照字符串来比较,不做类型转换 两个参数都是整数,按照整数来比较,不做类型转换 十六进制的值和非数字做比较时,会被当做二进制串 有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量...因为隐式转换(函数)已经改变了原来的值,所以说优化器在这里就直接不选用索引,直接使用全表扫描。 查询出不匹配的值(或者说是部分匹配的值),如上面的查询结果。

    2.3K10

    MySQL基础『数据类型』

    hh:mm:ss TIMESTAMP 时间戳,通常表示一个时间点,包括日期和时间 其他类型 ENUM 字符串对象,表示枚举类型,只能选取其中一个值,由于在某些数据库系统中的限制,ENUM 的使用有时会受到争议...SET 字符串对象,表示集合类型,可以选取零个或多个值 创建一个数据库 dataType mysql> create database if not exists dataType; 选择数据库...这是因为 当小数部分不足时,MySQL 自动补齐,补齐后,实际插入的值为 -100.00,有五位数,超出范围,自然就被拦截了 MySQL 也并非是铁面无私,当我们插入的数据小数部分超过指定精度时,MySQL...向其中插入值时,只能选择枚举中已经存在的元素,并且只能选择一个 mysql> insert into votes values ('张三', '男'), ('小红', '女'); mysql> select...* from votes; 关于 集合 中元素的查询 如果想查询包含其中一个元素的行信息,需要借助函数 find_in_set(val, set) 这个函数可以在 set 中查找是否存在 val,如果存在就返回其下标

    22010

    MySQL 8.0 JSON增强到底有多强?(一)

    关于MySQL 8.0 JSON数据类型,后面准备通过一个系列的文章来进行详细的介绍,这样方便大家对MySQL中JSON数据类型的使用有更好的了解; 很多业务人员在用 JSON 数据类型时会遇到各种各样的问题...,其中最容易犯的误区就是将类型 JSON 简单理解成字符串类型。...MySQL 8.0还支持RFC 7396中定义的JSON合并补丁格式关系型的结构化存储存在一定的弊端,因为它需要预先定义好所有的列以及列对应的类型。...,但如果不是,则尝试失败: mysql>CREATE TABLE t1 (jdoc JSON); Query OK, 0 rows affected (0.01 sec) mysql>INSERT...1、合并数组 在组合多个数组的上下文中,这些数组合并到单个数组中。JSON_MERGE_PRESERVE()通过将稍后命名的数组连接到第一个数组的末尾来实现这一点。

    8.5K21
    领券