Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP显示时,MySQL数据的编码错误_Php_Mysql_Encoding_Utf 8_Character Encoding - Fatal编程技术网

使用PHP显示时,MySQL数据的编码错误

使用PHP显示时,MySQL数据的编码错误,php,mysql,encoding,utf-8,character-encoding,Php,Mysql,Encoding,Utf 8,Character Encoding,我完全卡住了 我有一个在PHP4和MySQL4上运行的旧网站。SQL数据包含斯洛伐克特殊字符(á、ť、ť、ľ、ž等)。旧站点可以很好地显示字符 我已经将该站点迁移到一个新主机上,它现在运行在PHP7.3和MariaDB 10.3上。我用MySQLi替换了不推荐使用的mysql函数,现在代码运行良好。然而,角色完全是一团糟 我遇到了许多问题和答案,以下是我尝试过的: 将字符集设置为utf8和/或将windows-1250设置为mysqli连接 $link->set_字符集(“utf8mb4”);

我完全卡住了

我有一个在PHP4和MySQL4上运行的旧网站。SQL数据包含斯洛伐克特殊字符(á、ť、ť、ľ、ž等)。旧站点可以很好地显示字符

我已经将该站点迁移到一个新主机上,它现在运行在PHP7.3和MariaDB 10.3上。我用MySQLi替换了不推荐使用的mysql函数,现在代码运行良好。然而,角色完全是一团糟

我遇到了许多问题和答案,以下是我尝试过的:

  • 将字符集设置为utf8和/或将windows-1250设置为mysqli连接

    $link->set_字符集(“utf8mb4”);
    mysqli_set_字符集($mysqli,“utf8”)

  • 将utf8和/或windows-1250标题设置为每个.php文件

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

  • 使用UTF8和/或windows-1250编码(使用升华文本)手动重新保存每个文件

  • 将数据库排序规则更改为utf8_unicode_ci、utf8_slovak_ci以及其他内容

  • 更改所有表和数据库的字符集

    ALTER数据库数据库名称字符集utf8 COLLATE utf8\u unicode\u ci;
    ALTER TABLE tablename转换为字符集utf8 COLLATE utf8\U unicode\U ci

  • 使用PHP的iconv手动将输出从UTF8转换为windows-1250(这会使输出更加混乱)

    $output=iconv(“Windows-1250”、“UTF-8”($output))

  • 导入旧数据库时尝试了不同的排序规则。还尝试在phpMyAdmin中使用和不使用MYSQL40导入兼容模式

  • 设置utf8和/或windows-1250 html元字符集

    
    

  • 我发现了一些东西。当我在phpMyAdmin中直接读取SQL数据时,它在旧数据库(mysql4)和新数据库中显示了编码混乱的完全相同的数据。然而,旧站点在前端以某种方式正确地显示了它


    我真的被卡住了,我真的认为我已经尝试了所有的解决方法。可能是什么问题?

    好的。和的评论帮助我意识到新唱片工作得很好。只有数据库中的旧数据被弄乱了。对我来说,创建一个简单的矩阵,将编码错误的字符与正确的字符配对,然后用简单的SQL查询来更新它们更容易。谢谢您的帮助。

    您是否尝试过删除一行/添加一行字母相同的新行?服务器更新时,表行可能会出错。您还可以尝试创建一个新数据库,看看该数据库的格式是否也有问题。您能告诉我们应该显示什么以及现在显示什么吗?使用一些insert DATA或attach table为您的表创建查询,以便我们可以看到有助于调试的内容:
    SELECT HEX(col),单击…
    查看表中的内容。