MYSQL 数据库字符集问题
Posted
技术标签:
【中文标题】MYSQL 数据库字符集问题【英文标题】:MYSQL database charset issue 【发布时间】: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
【问题讨论】:
***.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_*
或PDO
。 mysql_*
函数将被弃用,并且在未来的 PHP 版本中不可用。以上是关于MYSQL 数据库字符集问题的主要内容,如果未能解决你的问题,请参考以下文章