首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修正通过PDO编码的数据库,而不指定UTF8字符集

问修正通过PDO编码的数据库,而不指定UTF8字符集
EN

Stack Overflow用户
提问于 2016-09-30 11:33:39
回答 1查看 709关注 0票数 0

虽然我设置我的web应用程序完全符合UTF8,但我忘了在PDO设置中指定UTF-8字符集.碰巧,这些汉字在数据库/phpmyadmin(你好)中看起来很奇怪,尽管在我的web应用程序中它们看起来不错。

由于我最终知道了解决方案(在PDO连接设置中添加字符集),我想知道是否有一种简单的方法可以将我的旧数据转换为适当的UTF-8。我在Stackoverflow上找到了执行此任务的以下代码,但它解决了每个列、每个表的编码问题列。

代码语言:javascript
复制
UPDATE tablename SET
field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8);

是否存在一种对整个数据库执行这种转换的方法?

我精确地指出,我的MySQL数据库/表已经配置为使用字符集UTF-8。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-01 18:02:30

你有“双重编码”。我相信这些步骤“导致”了这一切:

  1. 要存储的字节(例如用于你好)被正确编码为utf8 (E4BDA0 E5A5BD)。
  2. 列的CHARACTER SET正确为utf8 (或utf8mb4)。(可能是latin1,结果是一样的。)
  3. 当您使用latin1时,"connection“被设置为INSERTed。这就是出错的地方。声明所存储的数据被编码为latin1,这6个字符:十六进制E4 BD A0 E5 A5 BD。在存储过程中,它们被转换为列字符集(utf8),成为C3A4 C2BD C2A0 C3A5 C2A5 C2BD。
  4. 您正确地将数据SELECTed为utf8。但是,到现在为止,这给你带来了麻烦:你好。

有两件事是错的,两者都需要同时修复:

  • 步骤2需要更改以确定UTF-8是客户端的编码。见http://mysql.rjweb.org/doc.php/charcoll#php。为PDO执行类似于$db = new PDO('dblib:host=host;dbname=db;charset=UTF8', $user, $pwd);的操作。
  • 数据需要修正。您的UPDATE看起来很适合这种情况。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39790588

复制
相关文章

相似问题

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