如何将遗留PHP应用程序连接到MySQL v8?

如何将遗留PHP应用程序连接到MySQL v8?,php,mysql,legacy,mysql-8.0,php-5.4,Php,Mysql,Legacy,Mysql 8.0,Php 5.4,我有一个遗留的PHP论坛,我想以只读的方式进行归档。我已经使用PHP5.4在docker容器中运行了它,并且我已经将它连接到了MySQL 5容器 当我切换到使用MySQL 8时,它无法连接,原因有两个: MySQL 8将默认身份验证协议从MySQL_native_password切换到caching_sha2_password,php的MySQL驱动程序不支持后者。我通过创建一个使用mysql_native_密码身份验证机制的用户来修复这个问题 MySQL 8将默认服务器的字符集从utf8切换

我有一个遗留的PHP论坛,我想以只读的方式进行归档。我已经使用PHP5.4在docker容器中运行了它,并且我已经将它连接到了MySQL 5容器

当我切换到使用MySQL 8时,它无法连接,原因有两个:

  • MySQL 8将默认身份验证协议从MySQL_native_password切换到caching_sha2_password,php的MySQL驱动程序不支持后者。我通过创建一个使用mysql_native_密码身份验证机制的用户来修复这个问题

  • MySQL 8将默认服务器的字符集从utf8切换到utf8mb4,php的MySQL驱动程序不支持utf8mb4正是这个问题让我陷入困境。

  • PHP错误是:

    Warning: mysql_connect(): Server sent charset (255) unknown to the client.
    
    我知道我可以通过更改MySQL服务器的字符集来修复它,但我正在生产中的托管MySQL集群中运行它(来自Digital Ocean),我无法更改它。因此,我想知道是否可以在数据库级别或客户机/连接级别对其进行更改

    在导入数据之前,我尝试使用以下方法更改数据库的编码:

    ALTER数据库
    数据库名称
    字符集=utf8
    COLLATE=utf8\U unicode\U ci;
    
    我还尝试使用以下方法更改PHP中的连接字符集:

    $this->db\u connect\u id=mysql\u connect($this->server,$this->user,$this->password);
    mysql\u set\u字符集(“UTF8”,$this->db\u connect\u id);
    
    但是“Server sent charset unknown”错误在
    mysql\u connect
    行上,因此当
    mysql\u set\u charset
    运行时,错误已经抛出,
    db\u connect\u id
    false

    我也知道我可以升级PHP,从传统的mysql扩展切换到mysqli或PDO,但这个论坛是从2005年开始的,我从来没有打算使用它;这只是为了存档。我希望它能在不升级的情况下正常工作


    有什么建议吗?

    PHP5.4多年来一直不受支持。。。您不仅应该升级它以获得更好的性能,还应该升级它以修复所有与安全相关的bug Hanks Nico,但避免此问题的唯一方法是升级到PHP 7,它不支持mysql扩展(仅支持mysqli或PDO)。这需要我深入研究phpbb和smf论坛的代码库。我不需要良好的性能或安全修复,因为我计划将此设置为只读。如果不想运行升级,请继续使用MySQL 5;)OP在第一行提到了“出于存档目的的只读”。因此,他们不鼓励任何人注册。即使是现有的帐户也可能面临风险,所以我们希望他们也能删除所有敏感的用户数据。