2

嗨,我对这个查询有疑问

SELECT * FROM table WHERE `name` LIKE '%tést%'

HMTL 和 SQL 表都有 utf-8 编码,但不幸的是没有mysql_set_charset('utf-8'),我无法使用它。

我试过了,iconv("UTF-8", "ISO-8859-1", $name)但查询只匹配test

我想匹配所有这些:(test, tést, tèst, tëst因为它可以使用mysql_set_charset

编辑:

SET NAMES utf8更可能......数据库使用utf8编码,不幸的内容是从没有mysql_set_charsetnor的网络填充的SET NAMES

目前,如果使用这些功能,结果就会混乱。

version() 5.1.41-3ubuntu12.9

编辑2:

当我SET NAMES utf8只使用它时tést,它们看起来像tést

当我使用iconv("UTF-8", "ISO-8859-1", $name)它时,它只匹配test

4

4 回答 4

1

我刚刚执行了一个快速测试,MySQL 可以正常工作。

可能是你连接数据库的方式,你可以试试执行 SET NAMES 'utf8'; 在执行查询之前,看看是否有帮助!

另外,请注意 mysql_set_charset 应该采用 utf8,没有破折号!请参阅PHP 的示例以确保!

干杯!

于 2011-03-24T14:40:18.300 回答
1

在查询之前尝试:

mysql_query("SET NAMES 'utf8'", $conn);

*编辑*

显然取决于 MySQL 版本,您可能还需要使用:

mysql_query("SET CHARACTER SET utf8", $conn);

最后一点,数据库需要使用 UTF-8 字符集,以确保这一点:

ALTER <database_name> DEFAULT CHARACTER SET utf8;

*更多编辑*

阅读您的编辑后,我认为这是您的 HTML/PHP 编码的问题。在提交字符的页面上,确保您正确设置标题:

header('Content-Type: text/html; charset=UTF-8');

您还应该通过元标记进行设置:

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

mb_internal_encoding()然后用函数设置多字节编码:

mb_internal_encoding("UTF-8");

默认情况下,PHP 使用 ISO-8859-1。

于 2011-03-24T14:42:02.047 回答
0

使用所需的正则表达式尝试正则表达式,例如

SELECT * FROM table WHERE name REGEXP #REGULAR EXP HERE#

于 2011-03-24T14:38:38.457 回答
0

你试过设置名称吗?

mysql_query("SET NAMES utf8"); 
于 2011-03-24T14:39:47.590 回答