不区分大小写的utf8选择

Tim*_*nen 4 php sqlite select utf-8 case-sensitive

在SQLite中,我希望不区分大小写的"SELECT LIKE name" 工作对于普通的拉丁语名称很好,但是当名称是UTF-8且非拉丁字符时,select会变得区分大小写,如何使它也像latin字符一样不区分大小写?

ps我的sqlite是v3,我用PHP PDO连接

ama*_*nov 5

对于SQLite,您有两个选择:

  1. 使用ICU支持编译它:如何编译,编译选项
  2. 覆盖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();
Run Code Online (Sandbox Code Playgroud)