在 SQLite 中我想不区分大小写 "SELECT LIKE name"
对于普通的拉丁名称工作正常,但是当名称是 UTF-8 格式且带有非拉丁字符时,选择将变得区分大小写,如何使其也像拉丁字符一样不区分大小写?
附注我的 sqlite 是 v3,我连接 PHP PDO
最佳答案
对于 SQLite,您有 2 个选项:
- 在 ICU 支持下编译它:How to compile , Compilation options
- 覆盖 LIKE 函数,这里是一个完整的解决方案(来自 http://blog.amartynov.ru/?p=675 )
$pdo = new PDO("sqlite::memory:");
# BEGIN
function lexa_ci_utf8_like($mask, $value) {
$mask = str_replace(
array("%", "_"),
array(".*?", "."),
preg_quote($mask, "/")
);
$mask = "/^$mask$/ui";
return preg_match($mask, $value);
}
$pdo->sqliteCreateFunction('like', "lexa_ci_utf8_like", 2);
# END
$pdo->exec("create table t1 (x)");
$pdo->exec("insert into t1 (x) values ('[Привет España Dvořák]')");
header("Content-Type: text/plain; charset=utf8");
$q = $pdo->query("select x from t1 where x like '[_РИ%Ñ%ŘÁ_]'");
print $q->fetchColumn();
关于php - 不区分大小写的 utf8 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4285396/