【问题标题】:UTF-8 MySQL and CharsetUTF-8 MySQL 和字符集
【发布时间】:2011-02-26 00:01:57
【问题描述】:

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

【问题讨论】:

  • 试试这个 在数据库上: ALTER DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 它将解决“从现在开始”创建的表。不适用于 EXIST 表。对于他们你需要做: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;来源 - digitalocean.com/community/questions/…

标签: mysql utf-8 character-encoding


【解决方案1】:

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

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

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

【讨论】:

  • 可以简写为SET NAMES utf8
  • 是的,我知道。我写mysql 4+解决方案。
  • 4.0 不理解这些设置。并且 4.1 也理解集合名称
【解决方案2】:

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

试试吧,可能对你有用。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        不完全是。
        你必须告诉 mysql 你的 client 的编码。

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

        但您必须明确设置客户端的编码。 所以,这就是它与set names utf8 一起使用的原因。因为这个查询设置了客户端的编码。并让Mysql知道数据必须以utf-8形式发送。很有道理吧?

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

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

        【讨论】:

        • 谢谢上校。好的,让我看看..你正在谈论的 SQL 转储..除了我的示例中的 $result = mysql_query("set names 'utf8'") 行之外,我还有做另一套名字的utf8?请问具体在哪里以及如何?
        • @FFish 与您输入从SET SQL_MODE 开始的 sql 命令的位置相同。是 mysql 控制台还是什么?这只是一个简单的规则:每次插入或选择数据时 - 必须设置客户端编码。
        【解决方案6】:

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

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

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

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

        $mysqli->set_charset('utf8');
        

        我希望这是你需要的。

        【讨论】:

          猜你喜欢
          • 2013-07-07
          • 1970-01-01
          • 1970-01-01
          • 2012-01-14
          • 1970-01-01
          • 2014-08-06
          • 2015-06-02
          • 2013-05-26
          • 1970-01-01
          相关资源
          最近更新 更多