当我将所有内容都设置为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>

最佳答案



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

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

但是您必须显式设置客户端的编码。
因此,这就是为什么它可以与set names utf8一起使用的原因。因为此查询设置了客户端的编码。并让Mysql知道必须在utf-8中发送数据。很明智,对吧?

我还要提到您的SQL转储。它需要相同的设置。只需在顶部某处设置名称即可。因为您也是从某些客户端发送这些查询。并且还需要设置此客户端的编码。

还有一件事要提:确保您的服务器在Content-type header 中发送正确的编码。您也没有将其设置为UTF-8。

关于mysql - UTF-8 MySQL和字符集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2943943/

10-10 19:19