Mysql转向';进入’;?

Mysql转向';进入’;?,mysql,character-encoding,Mysql,Character Encoding,如何阻止mysql将“转换为?”™当我插入时 我相信这和charset有什么关系 我正在使用php进行mysql\u插入。也许有人会立即知道答案,但我不知道。不过,这里有一些关于检查内容的建议(可能会扩展问题) 在处理编码和转义时,应包括数据的完整历史记录 它是如何创建的 在出现问题之前,它发生了什么(它是否必须经过备份、电子邮件、是否在其他服务器、操作系统等上创建;如果它被传输,那么它是否作为文本文件?) 上述原因是,任何写入文本文件的操作(浏览器、mysql客户端、web服务器、php应

如何阻止mysql将
转换为
?”™当我插入时

我相信这和charset有什么关系


我正在使用php进行mysql\u插入。

也许有人会立即知道答案,但我不知道。不过,这里有一些关于检查内容的建议(可能会扩展问题)

在处理编码和转义时,应包括数据的完整历史记录

  • 它是如何创建的
  • 在出现问题之前,它发生了什么(它是否必须经过备份、电子邮件、是否在其他服务器、操作系统等上创建;如果它被传输,那么它是否作为文本文件?)
上述原因是,任何写入文本文件的操作(浏览器、mysql客户端、web服务器、php应用程序等)都可能会打乱字符编码

要进行故障排除,您可以开始消除,因此(在我的书中)第一步是

  • 使用mysql命令行客户端连接到mysql服务器
  • 检查
    显示变量的输出,如“character\u set%”

    (因此,即使在这个简单的环境中,也有7个值可以影响数据的解析、存储和/或显示方式
  • 检查
    显示创建表TableName
    ,并查找字符集和排序规则信息,这两种信息都是表的默认信息和列的显式定义
  • 说到以上,我认为任何西方脚本都不会对单个引号字符进行转码。因此,您可能需要查看转义和其他数据处理

    编辑
    回答和讨论中的大部分内容

    您发布的单引号被称为“”,它通常由一些web应用程序从通用单引号转换而来。它是一个
    UTF8
    字符,插入
    Latin-1
    数据库时会转换为–€™'. 这意味着您需要将MySQL的字符集更改为
    UTF8
    ,或者将网站的字符集更改为
    Latin-1
    。首选前者:

    ALTER DATABASE YourDatabase CHARACTER SET utf8;
    ALTER TABLE YourTableOne CONVERT TO CHARACTER SET utf8;
    ALTER TABLE YourTableTwo CONVERT TO CHARACTER SET utf8;
    ...
    ALTER TABLE YourTableN CONVERT TO CHARACTER SET utf8;
    

    这就是我所做的,它对我起了作用:

  • 首先确保包含“的列是utf8\u general\u ci”

  • 然后将mysql\u set\u字符集添加到代码中

    $db=mysql_connect("localhost", $your_username, $your_password);
    mysql_set_charset('utf8',$db);
    mysql_select_db($your_db_name, $db);
    

  • 这与字符集有关。如何插入/检索数据-即,您使用的是哪种库和编程语言(或可能是ORM)?数据库是什么字符集?是的,它与字符集有关。检查表的字符集和连接字符串中的字符集。使用正确的编码或unicode/utf。我应该编写一个查找“
    x
    a
    转换为
    b
    ”类型的问题,并给出一个通用的“您正在使用UTF-8,但您的员工正在将其解释为拉丁语-1”“回答并进行数十亿次重复…我做了这个,现在表是utf8\u general\u ci,但我仍然遇到同样的问题?@Hailwood:你也应该检查连接编码。我尝试了'mysql\u set\u charset'('utf8\u general\u ci',$this->link);但这并不重要difference@Hailwood:然后您应该发布一些代码,或者更好的是,发布一个小片段来重现问题。