Php SQLite:对特定查询执行区分大小写的LIKE查询

Php SQLite:对特定查询执行区分大小写的LIKE查询,php,sqlite,pdo,case-sensitive,Php,Sqlite,Pdo,Case Sensitive,我想运行选择。。。类似于SQLite中区分大小写的查询。但我只希望这一个查询区分大小写,而不是其他查询 我知道有 PRAGMA区分大小写=布尔值 但这似乎像查询一样发生了变化 如何在单个查询上启用区分大小写的功能 示例: 我想要一个“FuN”的查询来匹配“blah FuN blah”,而不是“foo FuN bar” (这是在使用PDO的PHP下运行的) 我可能能够在查询后打开,然后关闭,但我可以担心可能产生的影响(效率等)。有什么害处吗 我没有对数据库的写入权限 (这是在Windows Ser

我想运行
选择。。。类似于SQLite中区分大小写的
查询。但我只希望这一个查询区分大小写,而不是其他查询

我知道有

PRAGMA区分大小写=布尔值

但这似乎像查询一样发生了变化

如何在单个查询上启用区分大小写的功能

示例: 我想要一个“FuN”的查询来匹配“blah FuN blah”,而不是“foo FuN bar”

(这是在使用PDO的PHP下运行的)

我可能能够在查询后打开,然后关闭,但我可以担心可能产生的影响(效率等)。有什么害处吗

我没有对数据库的写入权限

(这是在Windows Server 2008下)


我还尝试了
从票证中选择id、summary和status,其中summary整理二进制文件,如“%OPS%”,但这并没有进行区分大小写的选择,它仍然像笔记本电脑一样返回结果。

您可以按列执行,而不是按查询(可能是您的情况)。为此,请使用sqlite

然后,此列上的所有
操作都将不区分大小写

您还可以对查询进行
排序
,即使该列未使用特定排序规则声明:

SELECT * FROM list WHERE name LIKE '%php%' COLLATE NOCASE
请注意,排序规则仅对ASCII字符不区分大小写。“A”=“A”,但“Æ”!=“æ”


SQLite允许您使用
SQLite\u create\u collation
声明新的排序规则类型,并在PHP端实现排序规则逻辑,但PDO不会公开这一点

我认为您可能需要在php代码中对返回值进行单独检查,以查看它们是否与区分大小写的数据匹配

$rs = mysql_query("Select * from tbl where myfield like '%$Value%'");


while($row == mysql_fetch_assoc($rs))
{

     if (strpos($row['myfield'],$Value) !== false)
     {
        $Matches[] = $row;
      }


 }

 print_R($Matches);

您可以尝试以下方法:

选择您的_列 从你的桌子上 你的专栏在哪里 核对拉丁语1\u常规\u cs,如“%YOUR\u VALUE%”

不确定列上的排序规则集是什么。我以拉丁语为例。运行查询并在末尾将“cs”更改为“ci”。您应该会看到不同的结果

更新

对不起。把问题读得太快了。上面的排序规则是针对mysql的。对于SQLLite,您应该能够使用二进制文件,这将为您提供区分大小写的搜索


参考:

为什么不采用简单的使用方法

PRAGMA case_sensitive_like = true/false;
在每个查询之前和之后,您希望区分大小写吗?但是请注意,区分大小写只适用于ASCII字符,而不适用于Unicode,这使得SQlite目前不完全符合UC

或者,SQlite允许应用程序实现REGEXP运算符,这可能有助于根据。

Try:

 SELECT id, summary, status FROM Tickets WHERE summary GLOB \"*OPS*\";
*
OPS
之间没有空格

SELECT * FROM table WHERe field LIKE '%search_term%'


在此表单中,SELECT不区分大小写。

此列上的所有LIKE操作都不区分大小写。
但我正在寻找区分大小写的操作?很抱歉。使用
PDO::sqliteCreateFunction
将sqlite
重写为PHP逻辑怎么样?我查阅了相关文档,发现
这个函数是实验性的。
这是一个实时环境,我想在它稳定之前我还不想尝试。如果我没有选择一个特定的字段进行比较呢?(关于
myfield
)请举例说明您的意思?例如,如果“tbl”有20个字段我想从中选择。您的示例仅针对PHP中的1个字段进行检查。在这种情况下,它将非常麻烦,您是否计划针对20个字段检查大小写敏感度?用户可以选择,因此是的,这是可能的。例如,为有关UI的项目搜索“UI”。这必须区分大小写,否则将返回大量带有“ui”字样的结果。用户会选择搜索,比如描述、注释、项目名称、注释、创建者、标题等。那么,如果通过另一个进程同时运行另一个查询,会发生什么情况?如果这变为真,突然有10个查询被用户运行,它们不是都区分大小写吗?@JBurace,sqlite是嵌入的,所以它在php脚本的过程中执行。Sqlite不是一个单独运行的进程,它充当服务器,例如mysql。因此,大多数pragma只影响设置它们的进程。因此,如果httpd/IIS/etc有4个子进程来处理web活动,并且child#1运行区分大小写的搜索(将pragma设置为true),那么在该child#2期间,另一个用户同时执行不区分大小写的搜索呢?两个孩子都有两个不同的查询(一个用于PRAGMA,一个用于SELECT),总共有4个查询。@JBurace我想你不是真的理解chris。您的四个子进程与数据库的连接不共享任何参数。@jthill:我认为该列的排序规则为空。我运行了查询,但它没有给我这样的排序顺序:latin1\u general\u cs
@Jburace,对。很抱歉如果一个人把问题看得太快,就会发生这种情况我的错-我给出的答案是mysql。让我也更新一下sqllite。好的,我尝试了
从票证中选择id、summary和status,其中summary整理二进制文件,如“%OPS%”并且没有工作;它仍然返回不区分大小写的结果(如
laptop
)。很有趣。我以为二进制应该区分大小写。您是否尝试排除其他因素(例如运算符&'%')。也许你可以试着去做“='OPS',看看它能做什么。但这不会测试任何东西<代码>=
已区分大小写。如果我做
选择id,summary,status FROM Tickets,其中summary='errors ON 3膝上型电脑'
它不返回任何内容,但如果我将
上的
更改为
上的
(正确匹配),它将返回匹配项。欢迎使用堆栈溢出!我已经编辑了你的答案的格式,请检查这是否是你想要的。JBurace要求进行区分大小写的查询。
SELECT * FROM table WHERe field LIKE '%search_term%'