7

为了让网站接受用户提交的可能不是英文(例如日文)的内容并将其保存到数据库中,对所有新内容进行 utf8_encode 并在以后检索时用户 utf8_decode 是否符合我的最佳利益?

更多信息:我正在使用学说,尝试将 Unicode 字符保存或选择到 MySQL 数据库时出现错误:

SQLSTATE [HY000]:一般错误:1267 排序规则(latin1_swedish_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)的非法混合操作'='

4

2 回答 2

8

您不需要使用编码功能。您需要做的是确保您是端到端的 UTF8。看起来您的数据库可能正在使用 latin1 编码和排序规则。您与数据库的连接也需要是 UTF8。有时这只是在建立连接后立即执行 SET NAMES UTF8 查询的问题。

在 mysql 中运行此命令可能会解决您在上面看到的错误,但您仍然需要端到端 UTF8。然后你不需要对你的数据做任何特别的事情。

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
于 2011-09-10T16:56:08.363 回答
5

布伦特是对的。它需要端到端。这是我的清单:

Apache config:
    AddDefaultCharset UTF-8
    AddCharset UTF-8  .utf8

php.ini:
    default_charset = "utf-8"

MySQL:
    ALTER DATABASE DEFAULT CHARACTER SET utf8;
    ALTER TABLE SomeTableName DEFAULT CHARACTER SET utf8;

PHP/HTML:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    …
    <form … <input type="text" name="some_field" value="<?php echo htmlspecialchars($row['some_field'], ENT_COMPAT, 'UTF-8'); ?>"…

This last one seems the most important. Call this function immediately after the mysql_connect() call:
    mysql_query("SET NAMES 'utf8'");
于 2011-09-10T19:59:21.593 回答