在sql中获取中文字母以在php中显示

时间:2016-10-08 05:21:35

标签: php mysql utf-8

我试图从mysql数据库中检索中文字母并在php上显示。我已经尝试过互联网上的一切,但它仍然显示我"?"在网站上。这是我的代码与此问题相关:

<html class="fsvs" lang="zh-Hans" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

在php部分:

$conn = mysqli_connect( $host, $user, $pass, $db );
if (!$conn) {
 die('Database connection failed.');
}
//get gan char
mysql_query("SET character_set_results=utf8", $conn);
$query_gan = "SELECT * FROM gan WHERE gan_id = '$gan_id'";
$result_gan = mysqli_query($conn,$query_gan);
$row_gan = mysqli_fetch_array($result_gan);

提前感谢:D

2 个答案:

答案 0 :(得分:0)

当我遇到类似问题时,我首先使用

在php中显示我的文本编码
echo mb_detect_encoding ( $text );

它显示来自我的查询的文本的编码。这告诉我,当我的数据库中包含中文或俄文字符时,我从mysql_query获取ASCII。

我所做的更改是在mysql_connect

之后添加了以下内容
mysql_set_charset('UTF8');

我的数据库是 utf8_unicode_ci 整理,我可以看到中文字符。

因此,如果mb_detect_encoding现在为您的文本提供UTF8,那么您将能够显示中文字符。

下一步是确保传递给浏览器的内容具有正确的标题...

header('Content-Type: text/html; charset=UTF-8');

将上面的内容放在php代码的顶部,以确保浏览器期望您的编码。

现在应该问题,但理想情况下你应该使用PDO或mysqli而不是mysql_connect方法。在这种情况下,等效的过程样式命令是..

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'test');
mysqli_set_charset($link, "utf8");

其中$ link相当于您与数据库的连接。

答案 1 :(得分:0)

混合mysql_*mysqli_*来电;仅使用 后者。

https://stackoverflow.com/a/38363567/1766831解释了如何处理?。特别是,它指出

  • 要存储的字节不编码为utf8mb4(MySQL外的别名UTF-8)。解决这个问题。
  • 数据库中的列为CHARACTER SET utf8mb4。解决这个问题。
  • 另外,检查读取时的连接是否为UTF-8。

您的<meta ...>很好。

在MySQL内部,对中文使用utf8mb4(不是utf8)。

表格中已有的问号不能转回中文字符。