【问题标题】:UTF8 reading Persian string as ? in MySQL 5.0UTF8 将波斯字符串读取为 ?在 MySQL 5.0 中
【发布时间】:2012-06-30 05:13:59
【问题描述】:

我在 MySQL 5.0 中有一个表,我在其中放入波斯语的城市名称,并使用一个页面尝试读取特定的城市名称! 以前是个词,突然从今天开始,我页面里的城市名全是“??????”喜欢! 我去 phpMyAdmin,将所有排序规则设置更改为“utf_persian_ci”,但没有任何反应! 有趣的是,phpMyAdmin 的“浏览”选项显示一切正常(所有城市名称都正常!)但是当我尝试使用来自页面的这种查询来获取它们时,事情发生了:

$result = dbquery("SELECT * FROM ".DB_CITIES." WHERE cty_company_id = ".$_GET['cmp']." AND EXISTS (SELECT cu_cmp_id FROM ".DB_COMPANY_USERS." WHERE cu_cmp_id = ".$_GET['cmp']." AND cu_usr_id = $user_id) AND EXISTS (SELECT ctus_user_id FROM scada_city_users WHERE ctus_user_id = $user_id AND ctus_city_id = cty_id)");

提前致谢!

【问题讨论】:

  • 您需要“告诉页面”您尝试阅读的内容是以 UTF8 或您尝试的任何编码编码的
  • 这并不容易,您需要先了解该主题。您正在寻找编码(不是整理)。但是首先从 MySQL 手册开始,他们有一个关于编码的章节。然后去 W3C 网站,他们也有编码和网站的帮助。当您完成所有这些操作后,您的代码看起来会有所不同(您也应该了解两者之间的 SQL 注入),所以如果您仍然有问题,请更新代码并改进问题。

标签: php mysql utf-8 phpmyadmin


【解决方案1】:

有一种简单的方法可以告诉数据库它应该提供 UTF-8 编码的字符串。只需告诉您的连接对象,您期望使用哪种字符集,数据库会为您完成剩下的工作。

$db = new mysqli($dbHost, $dbUser, $dbPw, $dbName);

// tell the db to deliver UTF-8 encoded strings.
$db->set_charset("utf8");

排序规则仅定义应如何比较两个条目,它与定义字符集不同。你的 HTML 页面也应该是 UTF-8 编码的,更多信息你可以在这里找到here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多