我编写了将 utf-8 存储在数据库中的代码。
它在浏览器中显示良好,但在数据库中看起来失真。由于该功能似乎有效,而且看起来我在处理字符串输入时没有遇到任何问题,“修复未损坏的内容”并在数据库中显示日文显示的 utf-8 字符是否有任何意义?
我不搜索数据库,因为无论如何字符串都是序列化的。
最佳答案
您必须指定查询的文本编码,例如您要发送到 MySQL
SET NAMES `utf8` COLLATE `utf8_unicode_ci`
如果您不这样做,MySQL 可能会使用服务器默认的文本编码来解释您的查询,该文本编码可能与 UTF-8 不同,例如异拉丁语。所以你的表中会有字符串,它们是 UTF-8 编码的,但 MySQL 将它们标记为 iso-latin。这不会对您的代码产生太大影响,因为 MySQL 只是将 UTF-8 字符串返回给您,而您忽略了文本编码。如果您在 phpMyAdmin 或任何其他设置连接字符编码的应用程序中查看数据,您最终会得到扭曲的字符串。
另一方面,您可以 utf8_decode
您的查询字符串和 utf8_encode
结果由 MySQL 提供,并且不要更改来自 iso-latin 的连接文本编码。但是如果你查询另一个使用 UTF-8 作为默认文本编码的 MySQL 服务器,你将以相反的方式结束同样的问题。所以只需在连接后设置一次连接的文本编码即可。
关于php - 不要修复没有损坏的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9556498/