数据库中的奇怪字符编码:旧脚本解码,新脚本失败
问题陈述:
网站从旧脚本迁移到基于 CodeIgniter 的新脚本时遇到了问题字符编码问题。旧脚本可以显示数据库中存储的波斯字符,而新脚本显示损坏的文本。
分析:
数据库表和列配置了排序规则utf8_persian_ci。新脚本还使用 UTF-8 作为其字符集和整理。该问题源于使用旧 TubaDBEngine 时字符最初存储在数据库中的方式。
旧脚本行为:
当波斯语字符插入到数据库中时使用 TubaDBEngine 的数据库时,它们不是以 UTF-8 存储,而是以不同的编码存储,这导致显示诸如数据库中的“Ø1مران”。但是,旧脚本能够正确解码和显示这些字符。
新脚本问题:
新脚本虽然已正确配置为 UTF-8,但无法使用 TubaDBEngine 的编码对最初存储在数据库中的字符进行解码。因此,新脚本在获取数据时显示损坏的文本。
解决方案:
SELECT CONVERT(BINARY CONVERT(fName USING latin1) USING utf8) FROM tnewsgroups
UPDATE tnewsgroups SET fName = CONVERT(BINARY CONVERT(fName USING latin1) USING utf8)
数据转换后,新脚本应该能够正确获取并显示波斯语字符。
以上是为什么我的新 CodeIgniter 脚本显示损坏的波斯语字符,而旧脚本则不显示?的详细内容。更多信息请关注PHP中文网其他相关文章!