虽然我将我的网络应用程序设置为完全符合UTF8,但我忘了在PDO设置中指定UTF-8字符集...碰巧中文字符在数据库/ phpmyadmin中看起来很奇怪(ä½å¥ ½为你好),虽然他们在我的网络应用程序中看起来很好。
当我终于知道解决方案(在PDO连接设置中添加字符集)时,我想知道是否有一种简单的方法将旧数据转换为正确的UTF-8。我在Stackoverflow上找到了以下执行此任务的代码,但它解决了每列的编码问题列,每个表的表..
UPDATE tablename SET
field = CONVERT(CAST(CONVERT(field USING latin1) AS BINARY) USING utf8);
是否存在执行此类转换到整个数据库的方法?
我确切地说我的MySQL数据库/表已经配置为使用charset UTF-8。
谢谢!
答案 0 :(得分:1)
你有“双重编码”。我相信这些步骤'造成'它:
你好
)已正确编码为utf8(E4BDA0 E5A5BD
)。CHARACTER SET
正确为utf8(或utf8mb4)。 (可能是latin1,结果相同。)INSERTed
时,“连接”设置为latin1。这就是错误所在。这表明存储的数据被编码为latin1,这6个字符:hex E4 BD A0 E5 A5 BD
。在存储期间,它们被转换为列charset(utf8)变为C3A4 C2BD C2A0 C3A5 C2A5 C2BD
。SELECTed
数据为utf8。但是,到现在为止,这给了你一团糟:你好
。有两件事是错的;两者都需要同时修复:
$db = new PDO('dblib:host=host;dbname=db;charset=UTF8', $user, $pwd);
的操作。UPDATE
看起来很适合此案例。