目前我有这样的配置:服务器Windows2008APACHE 2.4.23,PHP5.6.25,R2 5.7.14
我正在将我的应用程序移植到一个新的应用程序上:服务器Windows2019数据中心、Apache2.4.41、PHP7.4.0、MySQL 8.0.18。
我“复制”了一些我所知道的有关Apache、PHP、MySQL、headers的配置,特别是那些引用字符编码的配置,比如php.ini上的缺省字符集=iso-8859-1,httpd.conf上的AddDefaultCharset UTF-8,MySQL上的utf8mb4_general_ci排序规则,content="text/html;头上的charset=UTF-8“。
在这两种情况下,我都用相同的参数配置了一个ODBC,它的iSeries驱动程序指向一个AS400数据库。
要与db连接,我使用PDO,没有字符集参数。
在实际系统中,我没有遇到特殊的char问题,比如à,°,欧元:我从两个db读取,在html页面上显示。有些应用程序只使用MySQL,其他应用程序只使用ODBC,另一些应用程序同时使用:我从AS400获得字符串并保存在MySQL上。
在新系统上,我不能拥有相同的功能,因为默认的_charset=iso-8859-1只有ODBC应用程序运行良好,但是MySQL的显示错误像°as°或“as°”,如果我设置默认值_charset=utf-8 MySQL应用程序运行良好,而ODBC°变成了�,所以我无法从AS400获取字符串并将它们保存在MySQL上。
我的应用程序非常简单(不涉及框架),因此两个系统上的PHP代码都是相同的(稍后我会对其进行改进)。
我想我正在失去一些配置:一些建议?
谢谢
PS:请告诉我,如果有其他的信息,可以帮助了解一个解决方案。
编辑
作为准时的解决方案,我可以使用默认的字符集=utf-8,使用utf8_encode和来自ODBC的字符串,但是在更改所有代码之前,我将尝试找到一个全局解决方案。
编辑2:应用程序
根据要求,我在我的应用上提供了一些额外的信息,如果有用的话。
上。
编辑3:关于mysql驱动程序/连接/配置
在使用具有回波'°‘和具有以下结果的print_r($mysql_data)的相同代码进行测试之后:
我确信“问题”在MySQL连接上,也许是我设置的、不记得的东西:-
发布于 2020-10-01 09:20:21
我在这里报告解决办法,以防其他人面临同样的问题。由于有一个在处理字符集上将我与MySQL 8与5.7的差异(https://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset-connection-error-handling)联系在一起(“utf8mb4的默认排序规则在MySQL 5.7和8.0之间不同”),我将v.8替换为v.5.7,一切顺利。
好的,这不是一般的“解决方案”,而只是确认问题在MySQL 8/PHP互连的“配置”中。
https://stackoverflow.com/questions/63481162
复制相似问题