错误的字符编码从形式2-3%的时间

ldioqlga  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(268)

我在php中有一个表单,它向mysql提交数据。
查看数据库中的数据,我可以看到大约2-3%的行包含编码错误的国际字符,例如“gu”ðrún“显示为”guã°rãºn”。
但是,另一个用户可能会在几分钟后提交相同的字符,在这种情况下,字符的编码是正确的
因此,似乎编码是依赖于计算机使用或其他一些因素,我不知道。
在html的头部,我有这样一个:

<meta charset="ISO-8859-1">

表格有:

<form autocomplete="on" method="post" action="index.php" id="form1" accept-charset="ISO-8859-1">

mysql列被设置为latin1_swedish_ci。
我还应该做些什么让大家都满意?
编辑:因为它被标记为重复,我在其他地方找不到这个问题的答案。我已经阅读了大量关于字符编码的信息,这使我有了目前的设置,但这并不能解释为什么2-3%的数据与其他数据的行为不同。

xnifntxz

xnifntxz1#

这种类型的错误称为mojibake。原因在这里讨论
但是。。。你似乎暗示有些行有mojibake,而其他行有很好的重音字符?如果是这样的话,那就是一个客户机错误——有些客户机使用的是拉丁语1,有些客户机使用的是utf8。在这种水平上混不好。
但是,如果你真的这样混合,一定要确保每个客户宣布 CHARACTER SET 适合它的字节。这最好通过连接参数完成,但也可以通过 SET NAMES ... . 下面是一些关于php的杂乱无章的注解
eth u-急性期确实存在于 latin1 ,有可能表列和/或客户机可以设置为latin1或utf8mb4,您可以考虑移动到utf8以便将来验证数据库。
“来回改变”可能是危险的——特别是如果你用的是“错误的” ALTER . 请提供 SELECT col, HEX(col) ... . 十六进制 Guðrún :

if latin1:           47 75     F0    72     FA    6E
if utf8/utf8mb4:     47 75    C3B0   72    C3BA   6E
if 'double encoded': 47 75 C383 C2B0 72 C383 C2BA 6E

相关问题