【问题标题】:Mysql query strings search contain "/" resulting 0 resultsMysql 查询字符串搜索包含 "/" 结果 0 结果
【发布时间】:2020-06-26 04:54:17
【问题描述】:

我想搜索 model_type 列的特定值。但问题是,我无法使用 exactly same 值使用like= 查询它。

这是我的表格模型:

| id | model_type      | model_id |
|----|-----------------|----------|
| 1  | App\Models\User | 2        |
| 2  | App\Models\Link | 3        |
| 3  | App\Models\Link | 4        |

这里是设置
表架构:latin1
model_type 的默认字符集:utf8mb4
model_type 的排序规则:utf8mb4_unicode_ci
model_type 的数据类型:varchar(191)

当我尝试使用搜索时

SELECT * FROM models WHERE model_type = "App\Models\Link";

SELECT * FROM models WHERE model_type like "App\Models\Link";

它返回 0 行。

经过一番挖掘,当我尝试使用这些查询查询具有 \ 的 model_type 值时
SELECT * FROM models WHERE model_type like '%\Link%' 它将返回行,
但是当我尝试 SELECT * FROM models WHERE model_type like '%s\Link%' 时它返回 0 行

我尝试使用COLLATE,结果也是0行。
例如:SELECT * FROM models where model_type = "App\Models\Link" COLLATE utf8mb4_unicode_ci;

【问题讨论】:

标签: mysql


【解决方案1】:

在 mysql 的字符串字面量中,\ 需要转义,如 \\。但是在类似操作中,\ 也用于转义%_ 元字符,因此要在类似操作数中包含\,需要将其转义为\\。将它们放在一起,当您在类似操作数中使用字符串文字时,您需要\\\\

 SELECT * FROM models WHERE model_type like "App\\\\Models\\\\Link";

但是 like 在那里不合适,因为您正在寻找完全匹配。使用=,只需要转义一次:

 SELECT * FROM models WHERE model_type = "App\\Models\\Link";

【讨论】:

  • 谢谢!我不知道``需要被转义。
猜你喜欢
  • 2012-09-28
  • 1970-01-01
  • 2014-11-25
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多