【问题标题】:Mysql 'Equal' (=) operator doesn't work when 'LIKE' operator does work当'LIKE'运算符起作用时,Mysql'Equal'(=)运算符不起作用
【发布时间】:2022-06-21 06:55:39
【问题描述】:

[MYSQL] 以下是两个应该得出相同结果的查询。 但是,

SELECT * FROM my_table
WHERE id = 12345;

结果:没有

SELECT * FROM my_table
WHERE id LIKE 12345;

结果:正确答案

即使 'id' 也不是字符串,而是 int。这怎么可能?

【问题讨论】:

  • 提供重现您的问题的示例小提琴(CREATE TABLE + INSERT INTO 脚本,3-5 行)。现在看来不可能了。
  • 不是我不相信你,但也请添加你的完整表格定义。
  • @P.Salmon 它只发生在这个特定的表上,所以我假设它是因为 MYSQL 缓存?我不知道。我只是想得到一些想法。
  • 列id数据类型?
  • 您的 LIKE 查询返回哪些 id 值?

标签: mysql sql


【解决方案1】:

由于 MySQL 的隐式转换规则,您的查询:

SELECT * FROM my_table WHERE id LIKE 12345;

正在转换为:

SELECT * FROM my_table WHERE id LIKE '12345';

这与WHERE id = '12345' 相同,当然这是一个有效的比较,并且会按照您的预期运行。

【讨论】:

  • 感谢您的回复。如果 'WHERE id = '12345' 仍然没有给出任何结果怎么办?有哪些可能性?
【解决方案2】:

LIKE 运算符是一个逻辑运算符,用于测试字符串是否包含指定的模式。 然后使用这个:

SELECT * FROM my_table WHERE id LIKE '%'+'12345'+'%';

【讨论】:

    【解决方案3】:

    我也有同样的问题,整数值,varchars,Drupal 项目......

    在我的情况下,这发生在 Mariadb 升级到最后一个版本之后...... 真的我做了 2 次升级,一次将数据库转换为 utf8mb4 和 Mariadb 升级...

    就像我的查询一样

    select * 
    FROM taxonomy_vocabulary taxonomy_vocabulary
    where machine_name = 'news_type'
    

    具有相似的作品...具有相等的不...

    最后我做了一个简单的更改...编辑记录的值,并将其更改 x 其他值...并返回写入原始值...

    还有其他记录受到影响...不是全部...但大多数具有字符“_” (但也发生在一个整数值上)......

    【讨论】:

      猜你喜欢
      • 2016-01-27
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 2018-04-27
      • 2018-04-26
      相关资源
      最近更新 更多