首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP / MySQL中的编码问题

问PHP / MySQL中的编码问题
EN

Stack Overflow用户
提问于 2009-06-13 09:30:17
回答 6查看 1.9K关注 0票数 1

编辑:在我从最初的文章中得到反馈后,我修改了文本以澄清我的问题.

我有以下查询(伪代码):

代码语言:javascript
复制
$conn = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_query("SET NAMES 'utf8'; COLLATE='utf8_danish_ci';");

mysql_query("SELECT id FROM myTable WHERE name = 'Fióre`s måløye'", $conn);

这将返回0行。

在我的日志文件中,我看到了以下内容:

代码语言:javascript
复制
255 Connect     root@localhost on 
255 Query       SET NAMES 'utf8'; COLLATE='utf8_danish_ci'
255 Init DB     norwegianfashion
255 Query       SELECT id FROM myTable WHERE name = 'Fióre`s måløye'
255 Quit
  • 如果我在phpMyAdmin中直接运行查询,就会得到结果。
  • 表编码: UTF-8
  • HTML页面编码: UTF-8
  • 我可以添加记录(从表单输入),其中的名字使用重音(例如。"Fióre`sß“)
  • 我可以在使用->“名称如'$labelName%'”时读取带有重音的记录
  • 数据库中的信息看起来很好。

我不知道为什么我不能选择任何名称有重音字符的行。

我真的希望有人能帮我。

更新1:我已经达成了妥协。我将在存储数据时使用from实体转换重音,在从DB检索数据时转换html_entity_decode。这似乎很管用。

到目前为止,我看到的唯一缺点是,我无法使用phpMySQL以明文形式读取名称。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-06-13 11:31:17

正如其他答案所示,这似乎是一个编码问题。我建议打开查询日志( query,http://dev.mysql.com/doc/refman/5.1/en/query-log.html ),因为它可以向您展示数据库实际接收到的内容。

UPDATE:我终于找到了一个页面,解释了PHPandUTF-8 (http://www.phpwact.org/php/i18n/charsets)的脏细节。此外,请确保您阅读了这个(http://niwo.mnsys.org/saved/~flavell/charset/form-i18n.html),以了解如何从表单帖子中获得正确的数据。

票数 2
EN

Stack Overflow用户

发布于 2009-06-13 09:46:19

我认为你应该返回$result而不是$this->query。

此外,您应该了解SQL注入,并考虑使用mysql_real_escape_string或准备好的语句来保护您免受此类攻击。addslashes并不是一种适当的保护。

票数 4
EN

Stack Overflow用户

发布于 2009-06-13 10:56:46

尝试这个查询。如果得到结果,则查询中的回勾字符会出现问题

代码语言:javascript
复制
SELECT * FROM sl_label WHERE name Like 'Church%'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/990396

复制
相关文章

相似问题

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