使用预准备语句在 SQLSERVER 中搜索 Unicode 数据


Using prepared statement to search Unicode data in SQLSERVER

我有一个表,它有一个列firstName,类型为 NVARCHAR 。我正在编写一个查询以按部分名字搜索。我的查询如下所示:

$params[':firstName'] = "%วุฒิหิรัญทิ%";
$query = "SELECT * FROM users WHERE firstName LIKE :firstName";
$matches = $this-db->fetchAll($query, $params);

这是行不通的,我已经在MSSQL中读到我需要使用N来搜索Unicode字符。如何在准备好的语句中完成此操作?我尝试用N:firstName替换:firstName,但没有用。

编辑:此解决方案适用于拉丁语1字符集中的字符。它不适用于该集合之外的角色。对于特殊字符,我可以直接运行查询,例如 SELECT * FROM users WHERE firstName LIKE N'%วุฒิหิรัญท%' 并且它工作正常,但我无法让它与预准备语句一起使用。

您没有正确使用 SQL 通配符;

SELECT * FROM users WHERE firstName LIKE '%' + :firstName + '%'

% 符号是 SQL 的通配符运算符,以上应该适合您。