将特殊字符保存到MySQL数据库

时间:2011-11-01 11:18:31

标签: mysql

我目前在将特殊字符(®&©)保存到mySQL数据库时遇到问题。

在本地堆栈(我的开发机器的本地堆栈)上,操作平稳运行,前端输入的内容将保存为预期内容。

在保存到数据库时,在集中式服务器上使用相同的前端代码,角色将继续使用其他字符保存为®。 查看前端的记录时,这不是问题,因为它会反转它的功能并正确显示。

问题来自另一个使用相同数据库并且不做任何更改的独立系统,因此看起来像是®而不是简单的。

我混淆的原因是它似乎在我的本地堆栈上按需要工作,但在集中式服务器上却没有。

我正在寻找关于在本地服务器配置上可能导致这种情况的原因的想法。

提前致谢 标记

2 个答案:

答案 0 :(得分:2)

@Pranav Hosangadi(感谢)涵盖三个方面,以检查编码的一致性。以下解决方案增加了这一点。也许值得考虑(一种变体)@Soaice Mircea的回答(也谢谢)对于某些情况,这个答案并不能解决问题,尽管当我能够重现并找到问题的解决方案时,这不是必需的。 @Pranav的思路似乎对这个问题是成功的,因为它是关于在任何地方使用一个字符集而不是特定字符集的一致性。

要做的五件事:

  1. 确保数据库字符集和表格在整个过程中使用相同的字符集,例如在phpmyadmin中进行检查,注意并在下面使用此字符集

  2. 使用带有数据库字符集的php header()函数,例如:

    header('Content-Type: text/html; charset=latin1_swedish_ci');
  3. 在html标题中插入元标记,例如:

    <meta http-equiv="content-type"
    content="text/html;charset=latin1_swedish_ci">
  4. 在表单标记中添加charset-accept

    <form action=\"testsubmit.php\" method=\"post\" accept-charset=\"latin1_swedish_ci\">
  5. 设置mysql连接的charset,例如:

    $con = mysql_connect("localhost","test","test");      
    mysql_set_charset ( "latin1_swedish_ci", $con );
    

答案 1 :(得分:1)

在php代码中选择数据库后添加:

mysql_query("set names 'utf8'"); 

还要检查存储文本的列是否具有utf8编码。