MYSQL数据库charset问题

时间:2013-04-12 15:47:06

标签: php mysql character-encoding phpmyadmin

我有一个数据库问题,我无法理解。我来自丹麦,并在PHP和MySQL中建立了一个注册系统。现在......我已经单独制作了两张桌子。

当我通过PHP从数据库中查询时,其中一个表(我们称之为table1)显示我心爱的丹麦字母(æøå)就好了。但是当我去phpMyAdmin时,那些字母显示得很奇怪...例如:它在phpMyAdmin中看起来像这样:

Bjørn (which is Bjørn)

但是,当我从数据库中使用mysql_query('SELECT * FROM $tablename')获取它们时,它再次显示为“Bjørn”(应该如此)。

现在问题......

在另一个表格中(我们称之为table 2),然后在phpMyAdmin中'Bjørn'显示为'Bjørn'(看似正确)。但是当我用mysql_query('SELECT * FROM $tablename')将它拉入PHP时,它会显示为'Bj?rn'。所有字母'æøå'都显示为'?'。

我尝试了SHOW TABLE STATUS,它表明整理是一样的。

table1中,变量为VARCHAR(255),而在table2中,变量为TEXT

这两个表都是这样创建的:

CREATE TABLE >>tablename<< ( bla bla bla ) CHARSET=UTF8 

2 个答案:

答案 0 :(得分:2)

你应该像这样连接mysql

$link = mysql_connect('localhost', 'user', 'password');
mysql_set_charset('utf8',$link);

然后尝试执行正确获取的查询

这里的问题是,您还应该在连接到DB时指定字符集。

即使在存储时,如果你没有在与utf8的连接中设置字符集,你的插入也会变成乱码,所以在连接到DB时是否确认是否设置了这样的字符串。

希望这有帮助

同样最后但并非最不重要的是,在浏览器中显示时,您应该在将数据从数据库转储到浏览器时设置html标头,如下所示

<?php 
 header('Content-type: text/html; charset=utf-8'); 
?>

答案 1 :(得分:1)

我不知道phpmyadmin有什么问题,但在我自己的编程中我做了以下事情:

PHP(在其他任何事情之前):

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

HTML:

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

数据库查询:

SET CHARACTER SET utf8;

或者如果使用PDO我的dsn看起来像:

mysql:dbname=mydb;host=localhost;charset=utf8