从mysql数据库中提取字符编码的问题

时间:2013-01-08 17:20:44

标签: php mysql character-encoding

  

可能重复:
  UTF-8 all the way through

好吧,这是愚蠢的,我无法弄清楚。

将Mysql数据库设置为utf8_general_ci排序规则。我遇到问题的领域是longtext类型。

作为&eacute或其他重音字符添加到数据库的字符返回为 。

我通过stripslashes运行输出,我已尝试使用和不使用html_entity_decode,但可以找不到输出的变化。我做错了什么?

干杯

2 个答案:

答案 0 :(得分:2)

您尝试插入字符串的字符编码是什么?如果它在ISO-8859-1中,您可以使用PHP函数utf8_encode()将其编码为UTF-8,然后再将其插入数据库。

http://php.net/manual/en/function.utf8-encode.php

答案 1 :(得分:1)

正确编码非常棘手 - 层数太多了:

  • 浏览器
  • PHP
  • MySQL的

PHP中的SQL命令“SET CHARSET utf8”将确保客户端(PHP)将获取utf8中的数据,无论它们如何存储在数据库中。当然,首先需要正确存储它们。

DDL定义与实际数据

为表/列定义的编码并不意味着数据在该编码中。如果您碰巧将表定义为utf8但存储为differtent编码,那么MySQL会将它们视为utf8并且您遇到了麻烦。这意味着你必须先解决这个问题。

检查什么

您需要检查每层的数据流编码。

  • 检查HTTP标头,标头。
  • 检查请求正文中发送的内容。
  • 不要忘记MySQL几乎到处都有编码:
    • 数据库
    • 服务器整体
    • 客户端
      确保到处都是正确的。

转换

如果您收到例如windows-1250,并希望存储在utf-8中,然后在存储之前使用此SQL:

SET NAMES 'cp1250';

如果您的数据库中的数据为windows-1250,并想要检索utf8,请使用:

SET CHARSET 'utf8';

最后一点:

不要依赖过于“智能”的工具来显示数据。例如。 phpMyAdmin做(当我使用它时正在做)编码真的很糟糕。它遍历所有层次,因此很难找到。此外,Internet Explorer实际上是基于奇怪的规则“猜测”编码的愚蠢行为。使用简单的编辑器可以切换编码。另外,我推荐使用MySQL Workbench。