【问题标题】:MYSQL database charset issueMYSQL 数据库字符集问题
【发布时间】:2013-04-05 05:37:54
【问题描述】:

我有一个数据库问题,我无法理解。我来自丹麦,用 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 

【问题讨论】:

标签: php mysql character-encoding phpmyadmin


【解决方案1】:

你应该像这样连接mysql

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

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

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

即使在存储的同时,如果您没有在与 utf8 的连接中设置字符集,您的插入也会出现乱码,因此请在连接到 DB 时验证您是否进行了这样的设置。

希望对你有帮助

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

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

【讨论】:

    【解决方案2】:

    我不知道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
    

    【讨论】:

    • 所以我必须写'SET CHARACTER SET utf8;'进入我的所有查询?
    • no..连接后,您将此查询发送一次到数据库。与mysql_set_charset('utf8') 相同。我建议不要使用mysql_* 函数。最好使用mysqli_*PDOmysql_* 函数将被弃用,并且在未来的 PHP 版本中不可用。
    猜你喜欢
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2011-03-10
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多