【问题标题】:sqlite why select like works and equals does not?sqlite 为什么选择喜欢的作品而等于不喜欢?
【发布时间】:2014-11-03 17:49:40
【问题描述】:

我的 sqlite3 数据库有问题,我执行以下查询

sqlite> select * from property where link like "http://www.domain.com/huur/den-bosch/appartement-48118689-meester-spoermekerlaan-88/";

我得到两行

17|2014-11-03|Meester Spoermekerlaan 88|http://www.domain.com/huur/den-bosch/appartement-48118689-meester-spoermekerlaan-88/|5237 JZ|登博世|€ 789|3|1

32|2014-11-03|Meester Spoermekerlaan 88|http://www.domain.com/huur/den-bosch/appartement-48118689-meester-spoermekerlaan-88/|5237 JZ|登博世|€ 789|3|1

然后我执行相同的查询,但使用相等运算符,就像这样

sqlite> 从属性中选择 * where 链接="http://www.domain.com/huur/den-bosch/appartement-48118689-meester-spoermekerlaan-88/";

sqlite>(

我已经找到了与我类似的答案,但问题不一样,我的字段是数据类型“文本”,您可以在此处看到:https://stackoverflow.com/a/14823565/279147

sqlite> .schema 属性

CREATE TABLE 属性(id integer PRIMARY KEY AUTOINCREMENT UNIQUE,"date" text,address text,link text,postcode text,city text,price text,rooms text,page integer);

那么有人知道为什么会发生这种情况吗?这是我的版本信息

root@s1:/# sqlite3 application.sqlite3

SQLite 版本 3.7.3

【问题讨论】:

  • SELECT DISTINCT typeof(link) FROM property; 的输出是什么?
  • 那很奇怪.....它说“blob”,然后与另一个问题中所说的相关....但是 .schema 属性说“链接文本”,所以为什么两者之间的意见?他们不应该是一样的吗?或者可能是 sqlite3 做了一些优化?

标签: database sqlite


【解决方案1】:

我遇到了同样的问题。这项工作对我有用。

SELECT * from foo WHERE CAST(name AS BLOB) = CAST('bla' AS BLOB);

【讨论】:

  • 这解决了 PHP 项目中我忘记数据类型的情况,即bindValue(..., ..., SQLITE3_BLOB);
【解决方案2】:

SQLite 使用dynamic typinglink 列是否声明为 textblobfluffy bunnies 无关紧要。

LIKE 自动将其参数转换为字符串,但 = 运算符不会。

修复将条目写入数据库的程序以使用正确的数据类型。

【讨论】:

  • 这是绑定该字段的链接,也许我理解了这个 bindValue 方法? "$query->bindValue(":link", $item["link"], SQLITE3_TEXT);"我理解 SQLITE3_TEXT 写一个文本类型....
  • 原问题已回答。问一个新问题。
  • 我认为不是,我要求的是 SQLITE3_TEXT 数据类型,根据上面的评论,它显示为 blob,所以这仍然是一个谜。
  • Stack Overflow 不是一个论坛,而是一个问答网站。您实际问的问题是关于 LIKE 和 = 的不同行为。
  • 您的回答不足以回答问题,也许其他人可以阅读额外的信息并给出更完整的答案,谢谢。
【解决方案3】:

这是因为= 是一个文字字符串比较,所以它必须完全相同。 like 运算符正在字符串中查找匹配模式并找到它。

【讨论】:

  • 我认为 OP 知道这一点。问题是为什么当所讨论的字符串看起来相同时会发生观察到的行为。
  • 哦,是的,我错了,出于某种原因,我将 |5237 误认为是链接的一部分。觉得很奇怪,哈哈。
【解决方案4】:

我遇到了类似的问题,就我而言,重点是 like 不区分大小写,但 = 运算符区分大小写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-06
    • 2016-11-04
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多