MySQL数据包含š和ć等特殊字符,但它们显示为“?”在网页上。为什么?

时间:2010-12-11 16:40:16

标签: php mysql sql character-encoding

我正在尝试从表中检索包含值Boris Borenović的行 而是返回Boris Borenovi?

我的MySQL数据库和表都设置了utf8_unicode_ci个排序规则。

我的PHP页面显示表格中的数据,其中包含以下标题:<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />。我也试过了charset=utf-8,但它仍然不起作用。

我用来查询表中数据的Sql命令是SELECT * FROM contact,所以没什么特别的,只是无聊的简单查询。我尝试使用SELECT * FROM contact COLLATE Latin1_General_CI,但无法执行该查询。

如何让它发挥作用?谢谢。

5 个答案:

答案 0 :(得分:1)

以下是答案:can't insert russian text into mysql database 您需要配置MySQL以允许utf-8

答案 1 :(得分:1)

您是否设置了连接排序规则?尝试执行SET NAMES utf8将所有归类设置为utf-8,然后在执行select语句之前将charset设置为utf-8。

答案 2 :(得分:0)

您的数据库非常好。如果您在数据库本身内部看到?,则表示数据库表编码错误。

由于您在HTTP响应中看到?,这意味着没有指示PHP将字符作为UTF-8写入响应。检查此PHP UTF-8 cheatsheet的第3步。

如果您之后看到的是Å¡而不是š,那么您需要在utf8之前使用SELECT执行mysql_set_charset

答案 3 :(得分:0)

我的方式是:

mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET CHARACTER SET_CLIENT='UTF8'");

在连接数据库后输入此代码

(mysql_select_db($Database);)

答案 4 :(得分:0)

<?php

  $mysql_host = "localhost";

  $mysql_db = "database";
  $mysql_user = "username";
  $mysql_pass = "password";

  $mysql_character = "latin1";
  $mysql_collate = "latin1_bin";

  $db = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
  if(!$db) echo "Cannot connect to the database!";

  mysql_select_db($mysql_db);
  mysql_query("ALTER DATABASE `".$mysql_db."` DEFAULT CHARACTER SET '".$mysql_character."' COLLATE '".$mysql_collate."'");
  $query = mysql_query("SHOW TABLES");
  while($row = mysql_fetch_array($query)) {
    $table = $row[0];
    mysql_query("ALTER TABLE `".$table."` DEFAULT CHARACTER SET '".$mysql_character."' COLLATE '".$mysql_collate."'");

    $query2 = mysql_query("SHOW columns FROM `".$table."`");
    while($row = mysql_fetch_array($query2)) {
      $column = $row[0];
      $type = $row[1];
      $null = $row[2];
      if($null == "YES") $null = "NULL";
      if($null == "NO") $null = "NOT NULL";
      mysql_query("ALTER TABLE `".$table."` CHANGE COLUMN `".$column."` `".$column."` ".$type." CHARACTER SET '".$mysql_character."' COLLATE '".$mysql_collate."' ".$null);
    }
  }

?>