UTF-8 MySQL和Charset

时间:2010-05-31 13:49:35

标签: mysql utf-8 character-encoding

当我将所有内容都设置为UTF-8时,有人可以解释我吗?我一直都在接受那些该死的

的MySQL
服务器版本:5.1.44
MySQL字符集:UTF-8 Unicode(utf8)

我创建了一个新数据库

名称:utf8test
整理:utf8_general_ci
MySQL连接排序规则:utf8_general_ci

我的SQL看起来像这样:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

CREATE TABLE IF NOT EXISTS `test_table` (
    `test_id` int(11) NOT NULL,
    `test_text` text NOT NULL,
    PRIMARY KEY (`test_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `test_table` (`test_id`, `test_text`) VALUES
(1, 'hééélo'),
(2, 'wööörld');

我的PHP / HTML:

<?php
$db_conn = mysql_connect("localhost", "root", "") or die("Can't connect to db");
mysql_select_db("utf8test", $db_conn)  or die("Can't select db");

// $result = mysql_query("set names 'utf8'"); // this works... why??
$query = "SELECT * FROM test_table";        
$result = mysql_query($query);

$output = "";
while($row = mysql_fetch_assoc($result)) {
    $output .= "id: " . $row['test_id'] . " - text: " . $row['test_text'] . "<br />";
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="it" xmlns="http://www.w3.org/1999/xhtml" xml:lang="it">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>UTF-8 test</title>
</head>
<body>
<?php echo $output; ?>
</body>
</html>

6 个答案:

答案 0 :(得分:6)

尝试在mysql_connect函数之后设置字符编码,如下所示:

 mysql_query ("set character_set_client='utf8'"); 
 mysql_query ("set character_set_results='utf8'"); 

 mysql_query ("set collation_connection='utf8_general_ci'");

答案 1 :(得分:1)

在连接到您的数据库之后,我没有看到"SET NAMES 'utf8';"查询。

尝试一下,可能适合你。

答案 2 :(得分:1)

  

我将所有内容都设置为UTF-8

不完全。
你必须告诉mysql你的客户端的编码。

事实上,您不必在utf-8中设置“所有内容”。您可以将表放在latin1中并输出为utf-8。或者相反 非常灵活。

但是你必须明确地设置客户端的编码。 所以,这就是它与set names utf8一起使用的原因。因为此查询设置了客户端的编码。让Mysql知道必须在utf-8中发送数据。非常明智,是吗?

另外,我必须提到你的SQL转储。它需要相同的设置。只是在顶部的某处设置名称。因为您也是从某个客户端发送这些查询。此客户端的编码也需要设置。

还有一点需要注意:确保您的服务器在Content-type标头中发送正确的编码。你没有将它设置为UTF-8。

答案 3 :(得分:1)

我会说您忘记将PHP文件的内容类型编码设置为utf-8:

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

或者是MySQL数据库中的编码错误?

如果只加载数据会返回错误的结果,您可以使用前面提到的查询或这行代码为查询启用UTF-8:

$mysqli->set_charset('utf8');

我希望这就是你所需要的。

答案 4 :(得分:0)

看一下mysql_set_charset函数。也许您需要在检索数据之前调用它。

答案 5 :(得分:0)

您想要使用mysql_client_encoding并在需要时mysql_set_charset检查当前的字符集。或者只是不介意检查,盲目地去设置。