我使用vps与debian 9,mariadb 10.3.x,php7.0(标准LAMP)。我不得不更新所有包。删除并安装并导入数据库后,所有字符的外观如下:“Tch rzewski”我检查数据库中的编码(设置为utf8_general_ci),所有表都有相同的内容。在数据库中,我当然有正确的字符串版本。我还检查了输出的语言环境:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=pl_PL.UTF-8
LANGUAGE=
LC_CTYPE="UTF-8"
LC_NUMERIC="UTF-8"
LC_TIME="UTF-8"
LC_COLLATE="UTF-8"
LC_MONETARY="UTF-8"
LC_MESSAGES="UTF-8"
LC_PAPER="UTF-8"
LC_NAME="UTF-8"
LC_ADDRESS="UTF-8"
LC_TELEPHONE="UTF-8"
LC_MEASUREMENT="UTF-8"
LC_IDENTIFICATION="UTF-8"
LC_ALL=UTF-8
我检查每个文件(有meta utf-8)和php中的文件我有ini_set('default_charset','utf-8')我试试
header("Content-Type: text/html; charset=utf-8");
但这没有帮助
我现在能做什么?我可以重新安装服务器,但我不想浪费很多时间
我解决了添加到PDO mysql-attr_init_command的问题。现在所有的pdo命令看起来像:
$db = new PDO('mysql:host='._DBHOST_.';port=8889;dbname='._DBNAME_, _DBUSER_, _DBPASS_,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);