【问题标题】:MySQL table: Unicode character aren't correctly displayed in phpmyadminMySQL 表:Unicode 字符在 phpmyadmin 中未正确显示
【发布时间】:2018-05-09 11:32:50
【问题描述】:

MySQL 数据库只有一张表:

<?php

   $con=mysqli_connect("db2.ho.ua","spectorsky","s124816",spectorsky); 
   if (!$con) echo mysqli_connect_errno() . PHP_EOL.mysqli_connect_error() . PHP_EOL;    
   $sql="CREATE DATABASE if not exists spectorsky CHARACTER SET = utf8 COLLATE = utf8_unicode_ci";
   $mysql_result=mysqli_query($con,$sql);    
   if ($mysql_result) {
      echo "Database spectorsky created successfully". PHP_EOL;    }    else 
      echo "Database spectorsky hasn't been created: ".$con->errno.$con->error. PHP_EOL;    
   $sql="Create table if not exists categories (idCategory INTEGER PRIMARY KEY, nameCategory TEXT)".    " CHARACTER SET = utf8  COLLATE = utf8_unicode_ci";    
   if (mysqli_query($con,$sql)){
      echo "Table categories created successfully". PHP_EOL;    }    else
      echo "Table categories hasn't been created: ".mysqli_error($con). PHP_EOL;   
   mysqli_query($con,"delete from categories") or die(mysqli_error($con));   
   echo "That's all";   
   mysqli_close($con); 
?>

表格的文本字段包含 unicode 字符集中的西里尔文数据。该表在 Adroid 设备上创建,然后导出到服务器并从服务器导入。之后,Android 设备上的所有字符串都是正确的。但是,当我尝试通过 phpmyadmin 在服务器上查看这些字符串时,它们显示在 cp1251 中(字符串 АБВ 显示为 РђР'Р')。在 phpmyadmin 变量列表的列表中,我看到变量 character set database 设置为 1251,我没有足够的规则来编辑它。 SQL 选项卡上的查询set names utf8set character_set_database to utf8 执行时没有错误,但没有任何变化。 那么,问题来了:是否可以为当前会话更改character_set_database 变量,或者是否有其他方法可以使 phpmyadmin 以正确的方式显示 unicode?​​p>

提前致谢

【问题讨论】:

    标签: mysql unicode phpmyadmin


    【解决方案1】:

    选择cp1251utf8(或utf8mb4),但不要混用。

    АБВ,编码为 utf8 是十六进制 D090 D091 D092。注意:每个西里尔文 字符 2 字节

    如果将十六进制 D0 90 D0 91 D0 92 视为 cp1251,则会得到 АБВ。请注意,6 个 字符 是 6 个 字节。注意Р(大写ER)的重复;这来自D0

    关于导致它的原因,请参阅 Trouble with UTF-8 characters; what I see is not what I stored 中的“Mojibake” - 但根据需要将“latin1”替换为“cp1251”。

    (在进一步信息之后......)

    连接后使用一次:

    mysqli_query($con, "SET NAMES utf8");
    

    (其他读者注意:如果你需要中文或表情符号,一切都应该utf8mb4,而不是utf8。)

    【讨论】:

    • 瑞克·詹姆斯,感谢您的回复。我没有混合不同的编码,我想将所有内容都设置为 utf8。但是,我没有足够的权限将服务器变量 character_set_database 设置为 utf8....
    • mysqli_query($con, "SET NAMES utf8");
    • 它有效,谢谢!它应该在新行被插入到表中时使用(而不是在创建表时)。我认为您应该输入它作为答案,以便我可以投票。
    • 我已添加到我的答案中。只做一次。
    猜你喜欢
    • 2012-08-08
    • 2015-06-24
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    相关资源
    最近更新 更多