mySQL和PHP编码

时间:2011-03-24 14:33:47

标签: php mysql encoding utf-8 iconv

HI,我对此查询有疑问

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_charsetSET NAMES的网络上填充的。< / p>

目前,如果使用这些功能,结果会搞砸。

version() 5.1.41-3ubuntu12.9

EDIT2:

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

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

4 个答案:

答案 0 :(得分:1)

我刚刚进行了一次快速测试,而MySQL的工作正如您所期望的那样。

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

另外,请注意mysql_set_charset应该使用utf8,没有破折号!请参阅an example from PHP以确定!

干杯!

答案 1 :(得分: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。

答案 2 :(得分:0)

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

)进行regexp

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

答案 3 :(得分:0)

你试过SET NAMES吗?

mysql_query("SET NAMES utf8");