首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误的字符编码从表2-3%的时间

错误的字符编码从表2-3%的时间
EN

Stack Overflow用户
提问于 2018-10-19 18:12:08
回答 1查看 41关注 0票数 1

我在PHP中有一个表单,它向MySQL提交数据。

查看数据库中的数据,我可以看到大约2-3%的行包含错误编码的国际字符。“Gu rún”显示为“Gu°r r n”。

但是,另一个用户可能在几分钟后提交相同的字符,在这种情况下,字符被正确编码。

因此,编码似乎依赖于所使用的计算机或其他一些我不知道的因素。

在HTML的头上,我有以下内容:

代码语言:javascript
运行
复制
<meta charset="ISO-8859-1">

该表格的内容如下:

代码语言:javascript
运行
复制
<form autocomplete="on" method="post" action="index.php" id="form1" accept-charset="ISO-8859-1">

MySQL列被设置为latin1_swedish_ci。

我还应该做些什么来让这件事对每个人都有用吗?

编辑:因为它被标记为重复的,所以我在其他地方找不到这个问题的答案。我已经阅读了很多关于字符编码的信息,这使得我有了目前的设置,但这并不能解释为什么2-3%的数据与其他数据的行为不同。

EN

回答 1

Stack Overflow用户

发布于 2018-10-21 04:20:43

这种类型的错误称为Mojibake。讨论了https://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored产生的原因

但是..。您似乎暗示有些行具有Mojibake,而其他行则具有良好的重音字符?如果是这样的话,那么这就是一个客户端错误--一些客户机正在使用latin1,有些客户正在使用utf8。在这个层次上混在一起是不好的。

但是,如果确实采用这种方式,请确保每个客户端都会公布适合其字节的CHARACTER SET。这最好通过连接参数来完成,但也可以通过SET NAMES ...完成。这里是http://mysql.rjweb.org/doc.php/charcoll#php

由于eth和u-acute确实存在于latin1中,因此表列和/或客户端可以设置为latin1或utf8mb4,因此可以考虑迁移到utf8,以便将来对数据库进行校对。

“来回更改”可能是危险的--特别是如果您使用‘错误’ALTER。请提供SELECT col, HEX(col) ...Guðrún的十六进制

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52897888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档