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

问题描述 投票:1回答:2

我有一个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')");
?>
php mysql character-encoding
2个回答
5
投票

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

解决方案:做一个

 mysql_set_charset('utf8'); 

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

mysql_query("SET NAMES utf8;");

0
投票

对于目前遇到此问题的用户,mysql_query已在PHP 5.5.0中弃用,并且已在PHP 7.0.0中删除而不是mysqli_query(过程)或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")); 

希望这有助于那里的人;)

© www.soinside.com 2019 - 2024. All rights reserved.