我在配置使用 UTF8 的服务器时遇到了问题。好吧,我并没有完全按照这个方式配置。我工作的地方的一位客户就是这样的,我认为他不是配置 Web 服务器的专家。
我的 PHP+MySQL 应用程序需要使用 UTF8 的 Apache 和 MySQL。在发送了多封电子邮件后,此人已将 apache 配置为支持 utf8,但现在该配置 MySQL 了,我们无法对其进行配置。我不知道该怎么办,因为我不是系统管理员,但我在 Google 上配置了 ubuntu 上的 apache/mysql,并支持 utf8。
我对他说的是,请使用下一个配置我的cnf:
[mysqld]
character-set-filesystem=UTF8
character-set-server=UTF8
default-collation=UTF8_general_ci
default-character-set=UTF8
[client]
default-character-set=UTF8
[mysqldump]
default-character-set=UTF8
但什么都没改变。他传给我正在运行的 my.cnf,你可以在这里看到它:http://pastebin.com/NfcgKKiM...并且 MySQL 上的 UTF8 编码不起作用。
我在 PHP 中所做的是每次都使用SET NAMES
utf8`` 启动 MySQL 查询,并且它以 UTF8 的形式工作,但我不认为这是最好的选择,但这证明有些地方配置错误。不是吗?
我能做什么?我能对服务器管理员说什么?
谢谢你!抱歉我的英语不好!
答案1
DB(显示创建数据库 DB_NAME) 中的“CHARACTER SET”和“COLLATE”是什么?
尝试:
[mysqld]
init-connect='SET NAMES utf8'
答案2
你的 中缺少几个参数my.cnf
,下面是我的
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'
default_character_set=utf8
character_set_server = utf8
collation_server = utf8_general_ci
这应该会为你提供 MySQL 后端的完全 UTF8 支持
答案3
- 确保你的表在 MySQL 中具有正确的字符集
- 在所有页面上使用 UTF-8 内容编码
- 将 MySQL 会话字符集设置为 UTF-8
我的所有页面都是这样开始的:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
我的 MySQL 连接如下所示:(注意调用PDO::exec()
)
try {
$dbh = new PDO(('mysql:host=' . $mbdbhost . ';dbname=' . $mbdbname), $mbdbuser, $mbdbpass, array(PDO::ATTR_PERSISTENT => true));
$dbh->exec('SET CHARACTER SET utf8');
} catch (PDOException $e) {
header("Location: error.php");
}
我的表格看起来有点像这样:
CREATE TABLE IF NOT EXISTS fotouser (
idfotouser INT NOT NULL AUTO_INCREMENT ,
person INT NOT NULL ,
PRIMARY KEY (idfotouser) ,
INDEX person (person ASC) ,
CONSTRAINT person
FOREIGN KEY (person)
REFERENCES mb_person (idmb_person)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_swedish_ci ;