我有一个遗留的 PHP 论坛,我想将其设为只读以供存档。我已经设法让它在使用 php 5.4 的 docker 容器中运行,并且我可以很好地连接到 MySQL 5 容器。
当我切换到使用 MySQL 8 时,连接失败有两个原因:
MySQL 8 将默认认证协议从mysql_native_password 切换为caching_sha2_password,php 的mysql 驱动不支持后一种协议。我通过创建一个使用 mysql_native_password 身份验证机制的用户来解决这个问题。
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 降级到 5,以便让它在 Centos 8 上运行。较新的 php 已经无法运行。现在一切正常,通过 1 个 javascript 编辑,接受 mysql 连接。