MYSQL 数据库字符集问题

Posted

技术标签:

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

我有一个数据库问题,我无法理解。我来自丹麦,用 phpmysql 制作了一个注册系统。现在......我已经分别制作了两张桌子。

当我通过 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 

【问题讨论】:

***.com/a/11432833/1291428 此线程听起来与您的情况相似。 ***.com/questions/4777900/… 【参考方案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 版本中不可用。

以上是关于MYSQL 数据库字符集问题的主要内容,如果未能解决你的问题,请参考以下文章

关于mysql数据表中使用两个字符集的问题

如何修改MySQL字符集

关于MYSQL字符集问题

Mysql字符集的问题,更改数据库的字符集问题?

Mysql字符集和乱码问题

MYSQL 数据库字符集问题