代码之家  ›  专栏  ›  技术社区  ›  Edoardo

mysql准备的语句和区分大小写

  •  1
  • Edoardo  · 技术社区  · 8 年前

    过去我用 query mysqli类的方法现在我使用prepare方法重写了很多代码。 我有一张整理表 utf8mb4_bin (区分大小写)但是用户应该执行不区分大小写的查询,过去的查询是

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

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

    2 回复  |  直到 8 年前
        1
  •  2
  •   Bill Karwin    8 年前

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

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

    备注:我建议删除 SQL_CALC_FOUND_ROWS 是的。如果你不使用 LIMIT 是的。这只会让表演很糟糕。

        2
  •  1
  •   geco17    8 年前

    您只需在php中将值转换为大写,并用 upper 在查询中。

    select * from table where upper(column) like ?
    

    和那个?设置为要查找的字符串的大写值。