MySQL 准备好的语句和区分大小写

MySQL prepared statements and case sensitivity

以前我用的是mysqliclass的query方法。现在我正在使用 prepare 方法重写很多代码。 我有一个 table 排序规则 utf8mb4_bin (区分大小写)但用户应该执行不区分大小写的查询,过去的查询是这个

SELECT SQL_CALC_FOUND_ROWS * FROM utenti WHERE nome LIKE _utf8mb4 ? COLLATE utf8mb4_unicode_ci ORDER BY id_utente ASC

我知道我不能将此语法用于准备好的语句,最好的方法是什么?我想强制存储值和查询值小写,但我认为这不是最好的方法。

您需要做的就是在 php 中将您的值转换为大写,并在查询中用 upper 包裹您的列。

select * from table where upper(column) like ?

与?被设置为您要查找的字符串的大写值。

您应该能够对列应用不区分大小写的排序规则,然后将其与您的参数进行比较:

SELECT * FROM utenti 
WHERE nome COLLATE utf8mb4_unicode_ci LIKE ? 
ORDER BY id_utente ASC

P.S.: 我建议删除 SQL_CALC_FOUND_ROWS。如果您不使用 LIMIT,它就没有任何意义。只会让性能变差