Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP5.2(mysql)移动到7.3(pdo):从数据库加载的字符不能正确显示_Php_Mysql_Pdo - Fatal编程技术网

从PHP5.2(mysql)移动到7.3(pdo):从数据库加载的字符不能正确显示

从PHP5.2(mysql)移动到7.3(pdo):从数据库加载的字符不能正确显示,php,mysql,pdo,Php,Mysql,Pdo,我将一个网站迁移到PHP7.3,并从旧的mysql更改为pdo。一切正常,但德语字符显示不正确。我在这里读了很多,但没有找到答案 这是我的桌子: CREATE TABLE `test_table` ( `KategorieID` bigint(20) NOT NULL AUTO_INCREMENT, `Bezeichnung` varchar(100) COLLATE latin1_german1_ci NOT NULL DEFAULT '', `Vorgänger` bigint(

我将一个网站迁移到PHP7.3,并从旧的mysql更改为pdo。一切正常,但德语字符显示不正确。我在这里读了很多,但没有找到答案

这是我的桌子:

CREATE TABLE `test_table` (
  `KategorieID` bigint(20) NOT NULL AUTO_INCREMENT,
  `Bezeichnung` varchar(100) COLLATE latin1_german1_ci NOT NULL DEFAULT '',
  `Vorgänger` bigint(20) NOT NULL DEFAULT '0'
  PRIMARY KEY (`KategorieID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci
它是用拉丁文1编码的

这是我的pdo数据库连接:

try{

        $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES latin1");
        $db = new PDO("mysql:host=127.0.0.88;dbname=test;charset=latin1","testuser","testpass",$options);
}catch (PDOException $ex){
        die("Die Datenbank ist momentan nicht erreichbar.".$ex->getMessage());
}
它也用拉丁文1编码

这是我网站的标题:

echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=latin1\" />"."\r\n";
echo”“。“\r\n”;
它用拉丁文编码,我也试过“ISO-8859-1”

以下是我读取数据的方式:

$str = "SELECT Bezeichnung, KategorieID, Vorgänger FROM test_table WHERE (Vorgänger=:vg) ORDER BY Bezeichnung";
$rs = $db->prepare($str);
$rs->bindValue(":vg",5);
$rs->execute();
$row = $rs->fetch(PDO::FETCH_ASSOC)

echo "<pre>";
print_r($row);
echo "</pre>";
$str=“从测试表中选择Bezeichung、KategorieID、Vorgänger,其中(Vorgänger=:vg)按Bezeichung排序”;
$rs=$db->prepare($str);
$rs->bindValue(“:vg”,5);
$rs->execute();
$row=$rs->fetch(PDO::fetch_ASSOC)
回声“;
打印(行);
回声“;
这是网站上显示的部分结果:

J�德国工人

但它必须是:

杰尔梅斯特


我用phpmyadmin检查了条目。在那里它将正确显示。如果我在PHP5.2上运行我的旧mysql代码,我会得到正确的结果。我没有在db连接中设置任何字符集。也许我在pdo中遗漏了什么?

如果将其设置为UTF-8会发生什么?如果我设置$options=array(pdo::MYSQL_ATTR_INIT_COMMAND=>“set NAMES latin1”);to$options=array(PDO::MYSQL_ATTR_INIT_COMMAND=>“SET NAMES utf8”);它起作用了。为什么?我不知道为什么它以前能工作,但我有同样的问题,这也为我解决了。根据本文,utf-8mb4是最佳选择。本文中有一些关于差异的详细解释: