Php mysql 查询字符集

Php mysql query charset

我在 php 脚本中查询 mysql bd 的字符集有问题。

我将 GET 参数放在 select 查询中,它适用于所有拉丁字符,但对于西里尔字符,它 returns 我是空的 table。如果我在查询中放置一些带有西里尔字母的值而不是 GET 参数,查询将按我的意愿工作。同样,我在 php-Admin 中得到结果查询并且它有效。

结果中的所有西里尔字符都显示正确。

我检查了一切:php-文件是utf8GET参数值是utf8mysql_client_encoding() returns我utf8.

我已经尝试了所有我发现的 - 没有任何帮助。

header('Content-type:text/html; charset=utf-8');
mysql_set_charset('utf8', $link);
mysql_query("SET NAMES utf8", $link);
mysql_query("SET CHARACTER SET 'utf8'", $link);
mysql_query("SET SESSION collation_connection = 'utf8_general_ci'", $link);
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $link);

所有这些没有帮助

这是我的 php 脚本。

<?php
    $link = mysql_connect('localhost', 'r96036lg_searche', 'Jh1ZT4]^');
    //mysql_set_charset('utf8', $link);
    //mysql_query("SET NAMES utf8", $link);
    //mysql_query("SET CHARACTER SET 'utf8'", $link);
    //mysql_query("SET SESSION collation_connection = 'utf8_general_ci'", $link);
    mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $link);
    //echo mysql_client_encoding($link);
    mysql_select_db('r96036lg_searche', $link);
    //mysqli::set_charset('utf8');
    $query = "select id, name, typeid from MainObjects where used = 1";
    if(isset($_GET['name']) && !empty($_GET['name'])) {
        //$name = mb_convert_encoding($_GET['name'], "UTF-8", "win1251");
        $name = $_GET['name'];
        //echo mb_detect_encoding($name, "auto", false);
        //$name = iconv(mb_detect_encoding($name, "auto", false), "UTF-8", $name);
        //echo $name;
        $query .= " and typeid = 1 and (name like '%".$name.
                "%' or id in (select parentid from MainObjects where name like '%"
                .$name."%' and used = 1))";
    }
    //echo $query;
    $result = mysql_query($query, $link);
    if(!$result) echo mysql_error();
    else {
        $out = "[";
        while($row = mysql_fetch_row($result)) {
            ... //here is myoutput
        }
        $out .= "]";
        echo $out;
  }
?>

这就是你应该做的。它不会解决字符编码问题,但会帮助恢复。 (甚至可能解决你的问题,因为它可能只与不转义值有关)。

$query = "select id, name, typeid from MainObjects where used = 1";
if(isset($_GET['name']) && !empty($_GET['name'])) {
    $name = mysql_real_escape_string($_GET['name']);
    $query .= " and typeid = 1 and (name like '%".$name.
            "%' or id in (select parentid from MainObjects where name like '%"
            .$name."%' and used = 1))";
}
//echo $query;
$result = mysql_query($query, $link);

我这没有帮助,某处字符编码不匹配。有三点:

  • GET 数据:您是否尝试将 url 编码为 example.com/index.php?name=%d0%ba(西里尔小写字母 ka)
  • 与服务器通信。如果你真的按照你说的做了,应该不会出错
  • table 中的数据:table 的排序规则是否真的与其内容相对应。我可能怀疑是不匹配。如果数据是 UTF-8,但 table 不是,mysql 将尝试将数据从一种字符集转换为另一种字符集,结果不会太多。