php mysqli set_charset()的正确用法

zujrkrfu  于 2023-03-21  发布在  PHP
关注(0)|答案(2)|浏览(151)

我有一个关于正确使用$mysqli->set_charset()的问题。我已经很多年没有在我的网站上使用这个功能了。现在我正在重写我的连接脚本,并希望正确地应用$mysqli->set_charset()。目前网站仍然基于'latin 1'(但我很快就会切换到UTF-8(utf8 mb 4))。
我的服务器上的MySQLi(我自己管理)已经用latin 1配置了很多年了。我想现在添加这个$mysqli->set_charset("latin1")不会有什么坏处吧?
如果MySQLi默认配置为utf8 mb 4,如果没有$mysqli->set_charset()函数,我的网站上会出现奇怪的编码字符,这是真的吗?
我想确认一下我的假设。

ukxgm1gy

ukxgm1gy1#

mysqli::set_charset() set是 *connection的 * charset,也就是“我通过这个连接发送的所有字符串都将使用 this 编码,并且我也希望返回该编码”。您需要将其与您在PHP端使用的编码匹配 *。
也就是说,即使当前的设置是错误的,如果你改变它的当前值,你也可能会得到损坏的数据。这是因为在某些情况下,只要设置是一致的,从你的数据库传输到你的数据库的数据会以同样的方式被损坏。
在进行任何更改之前,您需要确定当前使用的编码,以及数据库中的数据是否损坏。从那里您可以确定一条路径,以确保所有编码匹配,数据正确编码并在所有步骤中处理,以及修复现有数据。
和往常一样,请参阅masterpost:UTF-8 all the way through
额外的想法:

  • 字符串编码通常是不可检测的,它是必须单独跟踪的元数据。
  • latin1实际上是ISO-8859-1,但要注意它是邪恶的双胞胎cp 1252,它在保留器8X和9 X字节范围内填充了额外的符号,特别是€。
ktca8awb

ktca8awb2#

这很简单。将mysqli_set_charset()设置为您希望数据编码的值。因此,如果表的列中的数据存储在utf8mb4中,则使用该字符集进行连接。
您不能在mysqli中设置默认字符集。mysqli扩展实际上将使用MySQL为其客户端提供的默认值。该值可以在我的.cnf文件中配置。这就是为什么建议始终使用mysqli_set_charset()设置字符集。除非您正在处理一些遗留数据库,否则始终将字符集设置为utf8mb4,它涵盖了最广泛的字符范围。

相关问题