php - 不区分大小写的 utf8 选择

标签 php sqlite select utf-8 case-sensitive

在 SQLite 中我想不区分大小写 "SELECT LIKE name" 对于普通的拉丁名称工作正常,但是当名称是 UTF-8 格式且带有非拉丁字符时,选择将变得区分大小写,如何使其也像拉丁字符一样不区分大小写?

附注我的 sqlite 是 v3,我连接 PHP PDO

最佳答案

对于 SQLite,您有 2 个选项:

  1. 在 ICU 支持下编译它:How to compile , Compilation options
  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();

关于php - 不区分大小写的 utf8 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4285396/

相关文章:

php - 传递 Javascript 数组 -> PHP

Php 7.1 - 空索引运算符数组

python - 如何使用 Pandas 将巨大的 CSV 转换为 SQLite?

java - Android SQLite 数据库处理程序实现错误

sql - 是否可以通过DB链接访问DB链接

php递归静态函数问题

java - 如何显示 ArrayList<Bitmap> 中的图像 (SQLlte)

mysql - sql——选择和更新

grails - 从 View 传递grails选择值到 Controller ?

php - 在php中使用fpdf在pdf文件中创建饼图