Php 有没有一种方法可以忽略并接受collate?

Php 有没有一种方法可以忽略并接受collate?,php,sql,sql-server,collate,Php,Sql,Sql Server,Collate,我对SQL请求有问题: SELECT CLCLEUNIK, NOM, VILLE, CODEP FROM CLIENT WHERE NOM LIKE :nom COLLATE French_CI_AI 在我的例子中,我使用collate是因为用户可以搜索“rhone”,它会找到“rhone”。但我的问题是,现在当有人搜索“Rhône”时,请求在我的数据库中找不到任何匹配项 编辑: 这是基础的创建: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER

我对SQL请求有问题:

SELECT  CLCLEUNIK, NOM, VILLE, CODEP 
FROM CLIENT 
WHERE NOM LIKE :nom COLLATE French_CI_AI
在我的例子中,我使用collate是因为用户可以搜索“rhone”,它会找到“rhone”。但我的问题是,现在当有人搜索“Rhône”时,请求在我的数据库中找不到任何匹配项


编辑: 这是基础的创建:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[CLIENT](


    [NOM] [varchar](50) NULL,
    [ADRESSE] [text] NULL,
    [CODEP] [varchar](5) NULL,
    [VILLE] [varchar](40) NULL,
    [TYPECLI] [int] NULL,
    [TEL] [varchar](20) NULL,



) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
这是php代码:

 public function searchCli(Request $request){
        require __DIR__.DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR."Entity".DIRECTORY_SEPARATOR."sqlconnect.php";


          $nom = $request->request->has("nom") ? $request->request->get("nom") : "";
          $nom = str_replace(" ", "%", $nom);


          $req ="SELECT  CLCLEUNIK, NOM, VILLE, CODEP FROM CLIENT WHERE NOM LIKE :nom COLLATE French_100_CI_AI";
          $prepare = $pdo->prepare($req);
          $prepare->execute(
            [
              "nom" => "%{$nom}%"
            ]
          );



          $clientsrecherche = $prepare->fetchAll(PDO::FETCH_OBJ);

          foreach($clientsrecherche as $key => $objet){
            foreach($objet as $key2 => $obj){
              $obj=utf8_encode($obj);
              $response[$key][$key2] = $obj;
            };
          }                     
            return new JsonResponse([ "response" => $response]);
       }
这是我所能提供的全部帮助

了解更多说明: 排序规则属性:
CI
指定不区分大小写(不区分大小写的比较,因此“ABC”等于“ABC”)

CS
指定区分大小写

AS
指定区分重音(区分重音,因此'u'不等于'u')

AI
指定不区分重音

您可以尝试使用
法语100_CI_AI
代替
法语100_CI_AI

了解更多说明: 排序规则属性:
CI
指定不区分大小写(不区分大小写的比较,因此“ABC”等于“ABC”)

CS
指定区分大小写

AS
指定区分重音(区分重音,因此'u'不等于'u')

AI
指定不区分重音


您可以尝试使用
French\u 100\u CI\u AI
而不是
French\u CI\u AI

您使用的是不区分大小写的排序规则,因此这应该可以。。。你能发布一个最小的可复制示例吗?@NeoKerd发布一个可复制示例-创建表语句、测试数据、查询。问题很可能是因为您使用的是
varchar
字符串,而不是排序规则。如果将
varchar
与错误的代码页一起使用,则参数值本身可能在到达服务器之前就已被篡改。您必须使用
COLLATE French_ciu_AI
这一事实本身就是一种强烈的气味,无论怎样都是一个问题。即使没有转换错误,该语句也会阻止服务器使用任何索引。排序规则字面上是指排序顺序。索引依赖于排序顺序来决定哪些值是等价的,哪些值在哪个值之前。如果必须使用与索引不同的排序规则,则索引将变为unusable@NeoKerd那你怎么知道你有问题?不知何故,您运行一个查询并得到意外的结果。这意味着您已经知道预期和实际结果是什么。只需打开SSMS或Azure Data Studio(基本上是数据库的VS代码),就可以看到表的模式。右键单击表格并选择
Script
以生成创建script@NeoKerd这很重要的原因是
varchar
表示带有代码页的文本。在US-ASCII范围之外,相同的字节值可以表示不同代码页中的不同字符。服务器将尝试将文本从客户端代码页转换为列的代码页。但是,如果客户机代码页一开始就错了,那么最终会出现乱码文本。这就是当打开ASCII文件时看到“奇怪”文本,或当需要重音字符时看到
字符时会发生的情况。您使用的是不区分大小写的排序规则,因此这应该可以工作。。。你能发布一个最小的可复制示例吗?@NeoKerd发布一个可复制示例-创建表语句、测试数据、查询。问题很可能是因为您使用的是
varchar
字符串,而不是排序规则。如果将
varchar
与错误的代码页一起使用,则参数值本身可能在到达服务器之前就已被篡改。您必须使用
COLLATE French_ciu_AI
这一事实本身就是一种强烈的气味,无论怎样都是一个问题。即使没有转换错误,该语句也会阻止服务器使用任何索引。排序规则字面上是指排序顺序。索引依赖于排序顺序来决定哪些值是等价的,哪些值在哪个值之前。如果必须使用与索引不同的排序规则,则索引将变为unusable@NeoKerd那你怎么知道你有问题?不知何故,您运行一个查询并得到意外的结果。这意味着您已经知道预期和实际结果是什么。只需打开SSMS或Azure Data Studio(基本上是数据库的VS代码),就可以看到表的模式。右键单击表格并选择
Script
以生成创建script@NeoKerd这很重要的原因是
varchar
表示带有代码页的文本。在US-ASCII范围之外,相同的字节值可以表示不同代码页中的不同字符。服务器将尝试将文本从客户端代码页转换为列的代码页。但是,如果客户机代码页一开始就错了,那么最终会出现乱码文本。当您打开ASCII文件时看到“奇怪”的文本,或者当需要重音字符时看到
字符时,就会发生这种情况。尽管如此,仍然不起作用,但感谢您的描述know@NeoKerd,好的,只要你使用
法语100_CI_AI
法语100_CI_AI
,它们就可以涵盖所有情况。所以,在PHP代码中查找您的问题仍然不起作用,但感谢您的描述,这样做很好know@NeoKerd,好的,只要你使用
法语100_CI_AI
法语100_CI_AI
,它们就可以涵盖所有情况。因此,请在PHP代码中查找您的问题