2011-01-31 65 views
22


我试图在我的数据库中保存法语口音,但它们没有像保存在数据库中一样保存。
例如,“é”被保存为“Ô。
我试图将我的文件设置为“Unicode(utf-8)”,数据库中的字段是“utf8_general_ci”以及数据库本身。
当我查看通过AJAX与Firebug发布的数据时,我看到口音传递为“é”,所以它是正确的。

谢谢,让我知道你需要更多的信息!在MySQL数据库中保存口音

回答

39

我个人上通过在后加入MySQL连接代码解决了同样的问题:

mysql_set_charset("utf8");

或: mysqli_set_charset("utf8");

POO相当于: $mysqli_link->set_charset("utf8");

有时候,你必须加入这个代码来定义主要PHP字符集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 
); 

这应该使的伎俩

+3

并且,如果您要使用`PDO`,请尝试以下操作:`$ db = new PDO(“database”,“username”只要评论一下,函数mysqli_set_charset(“utf8”)`需要两个参数,连接和字符集,所以它就像`mysqli_set_charset($ conn,“utf8”)``一样结束。 – 2014-03-13 03:43:22

6

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

尝试建立连接后发送一个查询

SET NAMES utf8; 

+1

我正在使用PHP和shell_exec命令来导入一个sql文件,并且这个解决方案是唯一的工作,谢谢! – Piero 2016-12-22 11:33:09

1

你有没有审查http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html:需要 使用 的Unicode应该设置客户端 字符设置相应的服务器通信

客户端应用程序;为 示例,通过发出SET NAMES'utf8' 声明。 ucs2不能用作客户端字符集的 ,这意味着它不适用于SET NAMES或SET CHARACTER SET。 (参见9.1.4节, “连接字符集和 排序规则”。)

进一步说:

,如果你从你的mysql -DB通过PHP获取数据(UTF-一切8)但仍然 得到'?'在 您的浏览器()一些特殊字符,试试这个:

mysql_connect()函数后,和 mysql_select_db()添加此行: 的mysql_query( “集名UTF8”);

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

0

您需要a)确保您的表格使用可以编码此类字符的字符编码(UTF-8倾向于是最近的编码),并且b)确保您的表单提交是以相同的字符编码发送到数据库。您可以通过将HTML/PHP /任何文件保存为UTF-8来实现此目的,并在头部添加一个元标记,以告知浏览器使用UTF-8编码。

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

哦,别忘了C,连接到数据库时,请确保您实际使用正确的字符通过执行字符集一组名称设置= UTF8(可能不正确的语法,我“马上要回去看看它应该是什么,但它会沿着这些线路)

3

如果你使用PDO,你必须实例化这样的:

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

正是我需要的!非常感谢:) – Ebpo 2011-01-31 19:37:48

1

使用UTF8:

设置一个元我n您的

<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'); 
+2

此扩展在PHP 5.5.0中被弃用,并且在PHP 7.0.0中被删除。(PDO :: MYSQL_ATTR_INIT_COMMAND =>'SET NAMES utf8'))' – 2016-02-21 14:14:33

3

mysqli_set_charset($康恩, “UTF-8”);

0

PHP(.net)建议您在连接后使用SET NAMES utf8等查询来设置字符集,因为您在MySQL语句中转义数据的功能可能无法按预期工作。

不要使用SET NAMES utf8,而应使用相应的..._ set_charset()函数(或方法),以防万一您正在使用PHP。