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

时间:2011-03-25 18:34:51

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

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

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

我的数据库(innodb)设置为UTF8。基本上所有东西(服务器端,客户端,数据库,连接等)都设置为UTF8和UTF8 general_ci整理......

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

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

问题是,如何通过php表单执行选择,使得一切都不敏感(如melee =mélee,jose =JOSÉ等)?

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

他们全都在utf8_general_ci,“显示'%character%'等变量”给我带来了所有UTF8 ...

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

为了“发送”案例和重音不敏感的字符串,我的php表格应该如何?

1 个答案:

答案 0 :(得分:-1)

以下是一些可能导致它的一般性问题:

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

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

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

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

    干杯!