为了让网站接受用户提交的内容,可能不是英语(例如日语),并将其保存到数据库中,这是我最感兴趣的utf8_encode所有新内容,和用户utf8_decode检索它以后?
进一步的信息:我正在使用学说,当试图保存或选择Unicode字符到MySQL数据库时,我得到一个错误:
SQLSTATE[HY000]:通用错误:1267
操作'='的排序(latin1_swedish_ci,隐式)和(utf8_general_ci,可强制)的非法混合
您不需要使用encode函数。您需要做的是确保端到端都是UTF8。看起来您的数据库可能正在使用latin1编码和排序。到数据库的连接也需要是UTF8。有时,这只是在建立连接后立即执行SET NAMES UTF8查询的问题。
在mysql中运行这个命令可能会解决你上面看到的错误,但是你仍然需要端到端的UTF8。然后你不需要对你的数据做任何特别的事情。
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Brent是对的。它需要是端到端的。这是我的清单:
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'");