php - 不要修复没有损坏的东西

标签 php mysql utf-8

我编写了将 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/

相关文章:

php 回显其他 php 代码

php - 我如何将这个巨大的分割查询变成一个查询

MySQL:uuid_short 是如何生成的?

c# - 销售产品数量

java - 如何知道我的 HTTP 请求是否使用 UTF-8?

c++ - 将 Unicode 的 UTF8 表示写入文件

php - 在php中访问<<<HTML中定义的变量

php - 大商务 API。如何创建购物车以及如何使用通配符搜索客户

php - 点击为 MYSQL 数据库添加 +1 投票

mysql - Perl 字符串操作和 utf8/unicode