在MySQL数据库中保存重音符号

时间:2011-01-31 18:13:59

标签: php mysql character-encoding diacritics


我正在尝试在我的数据库中保存法语口音,但它们不会像在DB中那样保存。
例如,“é”保存为“Ô 。
我试图将我的文件设置为“Unicode(utf-8)”,DB中的字段是“utf8_general_ci”以及DB本身。
当我查看我发布的数据时通过使用Firebug的AJAX,我看到重音通过了“é”,所以它是正确的。

谢谢,让我知道您需要更多信息!

8 个答案:

答案 0 :(得分:49)

我个人通过添加 MySQL连接代码

后解决了同样的问题
mysql_set_charset("utf8");

或mysqli:

mysqli_set_charset($conn, "utf8");

或mysqli OOP等价物:

$conn->set_charset("utf8");

有时你必须通过添加以下代码来定义主要的php charset

mb_internal_encoding('UTF-8');

在客户端HTML端,您必须添加以下标头数据:

<meta http-equiv="Content-type" content="text/html;charset=utf-8" />

为了使用JSON AJAX结果(例如使用jQuery),您应该通过添加以下内容来定义标题:

header("Content-type: application/json;charset=utf8");
json_encode(
     some_data
);

这应该可以解决问题

答案 1 :(得分:6)

最好的办法是您的数据库连接不是UTF-8编码 - 默认情况下通常是ISO-8859-1。

尝试发送查询

SET NAMES utf8;

进行连接后。

答案 2 :(得分:3)

如果你使用PDO,你必须像那样实现:

new \PDO("mysql:host=$host;dbname=$schema", $username, $password, array(\PDO::MYSQL_ATTR_INIT_COMMAND =>  'SET NAMES utf8') );

答案 3 :(得分:3)

mysqli_set_charset($ conn,“utf8”);

答案 4 :(得分:1)

您是否查看了http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html

  

需要的客户端应用程序   使用与服务器通信   Unicode应该设置客户端   相应的字符集;对于   例如,通过发出SET NAMES'utf8'   声明。 ucs2不能用作   客户端字符集,这意味着   它不适用于SET NAMES或SET   字符集。 (见9.1.4节,   “连接字符集和   归类”。)

除此之外:

  

如果你从你的PHP获取数据   mysql-db(一切都是utf-8)但仍然   得到'?'对于某些特殊字符   你的浏览器(),试试这个:

     

在mysql_connect()之后,和   mysql_select_db()添加以下行:   mysql_query(“SET NAMES utf8”);

     

为我工作。我先尝试过   utf8_encode,但这只适用于   äüöéè......等等,但不是   kyrillic和其他字符。

答案 5 :(得分:1)

使用UTF8:

中设置元数据
<meta http-equiv="Content-type" content="text/html;charset=utf-8" />   

当你连接到你的mySQL数据库时,强制进行编码,这样你就不必使用你的mysql设置了

$conn = mysql_connect('server', 'user', 'password') or die('Could not connect to mysql server.');
mysql_select_db('mydb') or die('Could not select database.');
mysql_set_charset('utf8',$conn); //THIS IS THE IMPORTANT PART

如果您使用AJAX,请按以下方式设置编码:

header('Content-type: text/html; charset=utf-8');

答案 6 :(得分:0)

你需要a)确保你的表使用的字符编码可以编码这些字符(UTF-8往往是最近的编码)和b)确保你的表单提交被发送到数据库采用相同的字符编码。您可以通过将HTML / PHP /任何文件保存为UTF-8,并在头部包含一个告诉浏览器使用UTF-8编码的元标记来完成此操作。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

哦,不要忘记C,当连接到数据库时,确保通过执行SET NAMES charset = utf8实际使用正确的字符集(可能不是正确的语法,我将不得不查看它应该是什么,但它将沿着这些方向)

答案 7 :(得分:0)

PHP(.net)建议在使用SET NAMES utf8之类的查询进行连接后设置字符集,因为在MySQL语句中转义数据的功能可能无法正常工作。

不要使用SET NAMES utf8,而是使用适当的... _ set_charset()函数(或方法),以防您使用PHP。