将数据插入mysql时出现PHP charset问题

时间:2012-01-28 18:22:15

标签: php mysql character-encoding

我有一个PHP文件,它在我的数据库中插入$ mail和$ password。见下面的代码。我的php文件,我的BD和我的表字段都在utf-8中。所以我不明白为什么我发送“Philémon”的邮件在我的桌子中以“Philémon”的形式出现。顺便说一下,我知道它不是邮件格式。这只是为了测试。

我的PHP:

<?php
header('Content-Type: text/html; charset=utf-8');
require("php/connect.inc.php");

$mail = mysql_real_escape_string("Philémon");
$password = sha1("pass123");

mysql_query("INSERT INTO ENS_MEMBRES (ENS_MAIL, ENS_PASS) VALUES ('$mail','$password')");
?>

2 个答案:

答案 0 :(得分:5)

您的PHP源代码可能是UTF-8编码的;您的数据库连接可能是ISO-8859-1编码,它是mySQL的默认连接编码。这将导致UTF-8 é被解释为两个独立的字节,并以这种方式存储在mySQL表中。

解决方案:做一个

 mysql_set_charset('utf8'); 

发送数据之前;如果该功能不可用,请使用

mysql_query("SET NAMES utf8;");

答案 1 :(得分:0)

对于当前遇到此问题的用户,mysql_query已在PHP 5.5.0中弃用,并已在PHP 7.0.0中删除,而可以使用mysqli_query(procedural)或PDO(refer php documentation) 。要为实施程序扩展的用户解决此问题,请尝试

$conn = mysqli_connect('host', 'user', 'password', 'dbname');
mysqli_set_charset($conn,"utf8");

这对我来说非常有效!

对于实现PDO扩展的用户,请尝试以下

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

希望这可以帮助某个人;)