我有一个问题,非常非常挑剔。
我有一个LAMP服务器,通过unixODBC连接到IBM i(AS400)。PHP通过IBM i的ODBC连接在IBM i上执行sql,我想在我的数据库中做一个简单的SELECT。
我想在我的数据库中做一个简单的SELECT。当我的记录里有特殊字符如:劐 é à @等时,PDO返回NULL。而当我在我的Web浏览器中执行这个脚本时,所有的特殊字符都是正常的。
我不明白为什么。我在我的DSN PDO连接中加入了'CHARSET=UTF-8'。
我认为这个错误与.NET Framework 2.0有关。iSeries Access ODBC Driver with unixodbc on Debian - Invalid UTF-8 characters being returned from iSeries。 因为当我用HEX(field)进行SELECT时,我从浏览器和CLI中得到的是六进制。
PHP最新版本(7.4.6),Debian 9。
根据评论线程,问题的原因是当从命令行shell和php CLI运行时,shell没有正确地配置UTF-8以适应正确的地域(国家等)。