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

问题描述 投票:0回答:1

我有一个遗留的 PHP 论坛,我想将其设为只读以供存档。我已经设法让它在使用 php 5.4 的 docker 容器中运行,并且我可以很好地连接到 MySQL 5 容器。

当我切换到使用 MySQL 8 时,连接失败有两个原因:

  1. MySQL 8 将默认认证协议从mysql_native_password 切换为caching_sha2_password,php 的mysql 驱动不支持后一种协议。我通过创建一个使用 mysql_native_password 身份验证机制的用户来解决这个问题。

  2. MySQL 8 将默认服务器的字符集从 utf8 切换为 utf8mb4,php 的 mysql 驱动程序不支持。 就是这个问题让我卡住了。

PHP错误是:

Warning: mysql_connect(): Server sent charset (255) unknown to the client.

我知道我可以通过更改 MySQL 服务器的字符集来修复它,但我在生产中的托管 MySQL 集群中运行它(来自 Digital Ocean),我无权更改它。所以我想知道我是否可以在数据库级别或客户端/连接级别更改它。

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

ALTER DATABASE
    database_name
    CHARACTER SET = utf8
    COLLATE = utf8_unicode_ci;

我还尝试使用以下方法更改 PHP 中的连接字符集:

$this->db_connect_id = mysql_connect($this->server, $this->user, $this->password);
mysql_set_charset("UTF8", $this->db_connect_id);

但是“Server sent charset unknown”错误在

mysql_connect
行,所以到
mysql_set_charset
运行时,错误已经抛出,
db_connect_id
false
.

我也知道我可以升级 PHP 并从遗留的 mysql 扩展切换到 mysqli 或 PDO,但是这个论坛是从 2005 年开始的,我从未打算 use 它;它仅用于存档目的。我希望有可能让它工作而无需升级它。

有什么建议吗?

php mysql legacy mysql-8.0 php-5.4
1个回答
-1
投票

我刚刚将我的 php 降级到 5,以便让它在 Centos 8 上运行。较新的 php 已经无法运行。现在一切正常,通过 1 个 javascript 编辑,接受 mysql 连接。

© www.soinside.com 2019 - 2024. All rights reserved.