Mysql变成'变成'?

时间:2010-10-04 10:46:51

标签: mysql character-encoding

当我插入时,如何阻止mysql将'转换为’

我认为它与charset或其他什么有关?

我使用php来执行mysql_insert。

3 个答案:

答案 0 :(得分:15)

您发布的单引号称为“acute accent”,通常由某些Web应用程序从通用单引号转换而来。它是一个UTF8字符,插入Latin-1数据库后会转换为''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;

答案 1 :(得分:1)

这就是我所做的,它对我有用:

  1. 首先确保包含'的字段为'utf8_general_ci

  2. 然后将mysql_set_charset添加到您的代码

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

答案 2 :(得分:0)

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

在处理编码和转义时,您应该包含完整的数据历史

  • 是如何创建的
  • 在问题发生之前发生了什么(它是否必须通过备份,电子邮件,是否在不同的服务器,操作系统等上创建..;如果它已被转移,那么它是否作为文本文件?)< / LI>

以上是因为写入文本文件的任何内容(浏览器,mysql客户端,Web服务器,php应用程序,以及可能已经完成它的几个图层)都会使字符编码陷入混乱。

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

  1. 使用mysql命令行客户端连接到mysql服务器。
  2. 检查SHOW VARIABLES LIKE 'character_set%'的输出 (所以即使在这个简单的环境中,你有7个值可以影响数据的解析,存储和/或显示方式
  3. 检查SHOW CREATE TABLE TableName,并查找字符集和整理信息,包括表的默认值和列上的显式定义
  4. 说完以上所有内容后,我认为任何西方脚本都不会对单引号字符进行转码。因此,您可能需要查看转义和其他数据处理。

    修改 以上大部分内容来自答案和讨论here