如何修复LAMP UTF8编码?

时间:2013-12-06 21:54:10

标签: php mysql apache encoding utf-8

我将所有关于编码的内容设置为utf8。但浏览器显示我'???????'。我的设置如下。


MySQL“显示类似'c%'的变量”

character_set_client     | utf8
character_set_connection | utf8
character_set_database   | utf8
.... (all utf8)

MySQL my.cnf

[client]
default-character-set = utf8
[mysqld]
init_connect="SET collation_connection = utf8_general_ci"
init_connect="SET names utf8"
character-set-server = utf8
collation-server = utf8_general_ci
[mysql]
default-character-set = utf8

在我的所有PHP文件中包含:

<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />

Apache2 httpd.conf

AddDefaultCharset Off (if utf-8, show me '???' ,too)

在MySQL控制台中,(转储数据库)

SELECT name from campagin LIMIT 1
    => print in working order, not '????'  

我不知道什么是问题。

作为参考,我在test.php中测试了这个案例..

<?php
    mysql_connect('localhost','root',ROOT_PW);
    mysql_select_db(TEST_DB_NAME);
    mysql_query("INSERT INTO a SET msg='안녕하세요'"); // char is KOREAN, meaning 'Hi'
    $res = mysql_query("SELECT msg FROM a LIMIT 1");
    $row = mysql_fetch_assoc($res);
    echo $row['msg'];
?>
    => this print '안녕하세요' in working order not '????'

但在MySQL控制台

 "SELECT msg FROM a LIMIT 1"
     => print not '안녕하세요' but abnormally '안녕하세요'

增加: 在mysql控制台

"SHOW CREATE TABLE a"
    => Table | Create Table
       a     | CREATE TABLE `a` ( 'msg' varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 

1 个答案:

答案 0 :(得分:1)

使用基础mysql_连接器,您需要声明

mysql_query( "SET NAMES utf8" );
mysql_query( "SET CHARACTER SET utf8" );

这些告诉MySQL你与它的通信将通过UTF8,否则它可能无法正常工作。

您还需要确保您的表及其列定义为UTF-8,MySQL在列级别处理编码。如果您SHOW CREATE TABLE campagin您在表格和列上进行编码会得到什么?如果列没有吐出编码,则默认为表级编码。