FFi*_*ish 6 mysql utf-8 character-encoding
有人解释我,当我把所有东西都设置为UTF-8时,我会继续得到那些该死的
MySQL
服务器版本:5.1.44
MySQL字符集:UTF-8 Unicode(utf8)
我创建了一个新的数据库
name:utf8test
collation: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');
Run Code Online (Sandbox Code Playgroud)
我的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>
Run Code Online (Sandbox Code Playgroud)
尝试在这样的mysql_connect函数之后设置charachter编码:
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
Run Code Online (Sandbox Code Playgroud)
我将所有内容都设置为 UTF-8
不完全的。
你必须告诉mysql你的客户端的编码。
事实上,您不必将“所有内容”都设置为 utf-8。您可以使用 latin1 格式创建表并使用 utf-8 格式输出。或者相反。
非常灵活。
但您必须显式设置客户端的编码。所以,这就是它与 一起工作的原因set names utf8。因为这个查询设置了客户端的编码。并且让Mysql知道数据必须以utf-8发送。很明智吧?
我还必须提到你的 SQL 转储。它需要相同的设置。只需在顶部的某个位置设置名称即可。因为您也从某些客户端发送这些查询。并且该客户端的编码也需要设置。
还有一件事要提:确保您的服务器在 Content-type 标头中发送正确的编码。你也没有将其设置为UTF-8。
| 归档时间: |
|
| 查看次数: |
12126 次 |
| 最近记录: |