Ich habe Fragen zur richtigen Anwendung
$mysqli->set_charset()
。我已经很多年没有在我的网站上使用此功能了。现在我正在重写我的连接脚本,并希望正确应用 $mysqli->set_charset()
. Derzeit basiert die Seite noch auf „latin1“ (ich werde aber bald auf UTF-8 (utf8mb4) umsteigen.)
MySQLi auf meinem Server (den ich selbst verwalte) verwendet seit Jahren eine Latin1-Konfiguration. Ich dachte, es würde nicht schaden, das jetzt hinzuzufügen $mysqli->set_charset("latin1")
?
Wenn MySQLi standardmäßig als utf8mb4 konfiguriert ist, werden auf meiner Website ohne die $mysqli->set_charset()
-Funktion seltsam codierte Zeichen angezeigt?
Ich möchte meine Hypothese bestätigen.
mysqli::set_charset()
设置连接的字符集,即“我通过此连接发送的所有字符串都将使用这个 > 编码,我也希望编码回来”。您需要将其与您在 PHP 端使用的编码相匹配。也就是说,即使当前设置错误,如果您更改当前值,也可能会导致数据损坏。这是因为在某些情况下,只要设置一致,从您的数据库传输到数据库的过程中被破坏的数据就会以相同的方式被破坏。
在进行任何更改之前,您需要确定当前使用的编码是什么,以及数据库中的数据是否被破坏。从那里您可以制定一条路径来确保所有编码都匹配,您的数据在所有步骤中都正确编码和处理,以及修复现有数据。
一如既往,请参阅主帖:UTF-8 贯穿始终一个>
额外的想法:
latin1
实际上是 ISO-8859-1,但要注意它是邪恶的双胞胎 cp1252,它在保留器 8X 和 9X 字节范围中填充了额外的符号,特别是 €。 参考李>