php - 如何通过 PHP 表单使选择不区分重音?

标签 php mysql utf-8 case-insensitive non-ascii-characters

我试图找到与我的问题相似的东西,但我总是找到相反的情况......

这是交易(非常感谢任何帮助):

我的数据库 (innodb) 设置为 UTF8。基本上一切(服务器端、客户端、数据库、连接等)都设置为 UTF8 和 UTF8 general_ci 整理...

我的理解是 general_ci 使其不区分大小写,但也不区分重音。

在 phpmyadmin 中,查询类似 'a' = 'á' 的结果为真(“1”),而尝试从另一个站点的 php 表单中查询带重音的名称只会导致“0”。

问题是,我如何通过 php 表单执行选择,使所有内容都不敏感(如 melee = mélee、jose = JOSÉ 等)?

所有内容都设置为 UTF8,包括 php header 、“SET NAMES ('utf8') 以及所有这些都在 my.cnf 中设置.... 我的表单标签中也有一个“accept-charset="utf-8"”,但它是这样工作的: - “jose”只给我“jose%”条目... - 如果我想找到 JOSÉ,我不能简单地查询“jose”,最后一个 É“必须”是带有重音符号的大写字母(如 josÉ 或 JOSÉ),但如果我尝试选择“josé”将找不到任何东西“....

它们都在 utf8_general_ci 中,“show variables like '%character%'”给我带来了所有 UTF8...

名称正确存储在数据库中(使用 UTF8 字符,并且在页面中查看时,值显示正确),我可以通过 phpmyadmin 中的 SQL 比较“a”和“Ô没有问题,他们返回真...当我使用表单和与该数据库的连接时它就不起作用...字母不区分大小写,对,但重音不是(甚至不区分大小写),知道为什么那个?

我的 php 表单应该如何“发送”不区分大小写和重音的字符串?

最佳答案

这里有一些可能导致它的一般情况:

  1. 只是为了确定,您应该存储当前连接(mysql_connect 的结果),然后您应该将它作为参数传递给 mysql_query("SET NAMES 'utf8'",$conn_handler);

  2. 您的数据库是 UTF8,但是您的表和列呢?它们也是 UTF8 吗?

  3. 您的 View 是使用没有 BOM 的 UTF8 编码的吗?这可能会导致您在“André”中看到“É”字符。

如果两者都不起作用,您介意分享您连接到数据库的方式吗?

干杯!

关于php - 如何通过 PHP 表单使选择不区分重音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5436654/

相关文章:

php - Mongodb更新多个具有不同值的文档

php - 按字段对行进行分组

php - Laravel 迁移 Postgres 错误 SQLSTATE[08006]

MySQL 重新排序列表

php - 如果可以使用接口(interface)和特征,为什么 PHP 有抽象类?

mysql - 从 Debian 8 升级到 Debian 9 后 MariaDB 中的日期比较

php - 复制后编码混淆

Java URLConnection utf-8 编码不起作用

javascript - 服务 JavaScript 时使用哪个字符集与 PHP 的 header

mysql - WordPress 插件样板表创建