将数据插入mysql时PHP字符集问题

将数据插入mysql时PHP字符集问题,php,mysql,character-encoding,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

我有一个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源代码可能是UTF-8编码的;您的数据库连接可能是ISO-8859-1编码的,这是mySQL的默认连接编码。这将导致UTF-8被解释为两个独立的字节,并以这种方式存储在mySQL表中

解决方案:做一个测试

 mysql_set_charset('utf8'); 
在发送数据之前;如果该功能不可用,请使用

mysql_query("SET NAMES utf8;");

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

解决方案:做一个测试

 mysql_set_charset('utf8'); 
在发送数据之前;如果该功能不可用,请使用

mysql_query("SET NAMES utf8;");

对于当前遇到此问题的用户,
mysql_query
在PHP5.5.0中已被弃用,并在PHP7.0.0中被删除,而不是使用mysqli_query(过程)或PDO()。要为实现过程扩展的用户解决此问题,请尝试以下操作

$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")); 

希望这对其他人有所帮助;)

对于当前遇到此问题的用户,
mysql_query
在PHP5.5.0中已被弃用,并在PHP7.0.0中被删除,而不是使用mysqli_query(过程)或PDO()。要为实现过程扩展的用户解决此问题,请尝试以下操作

$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")); 

希望这对其他人有所帮助;)

mail()
使用的编码是什么?您的数据库连接可能没有使用UTF-8?不是表本身,而是与数据库的连接。
mail()
使用的编码是什么?您的数据库连接可能没有使用UTF-8?不是表本身,而是与DB.Hello Pekka.mysql\u set\u charset('utf8')的连接解决了这个问题。你太棒了!我放入标题('Content-Type:text/html;charset=utf-8');为什么还不够?@user no。该标题只是告诉浏览器如何解释即将到来的输出;它对其他任何东西都没有影响。页眉(blalbla)只对页面上显示的内容有影响?对吗?非常感谢你的帮助!你好,Pekka。mysql\u set\u charset('utf8')解决了这个问题。你太棒了!我放入标题('Content-Type:text/html;charset=utf-8');为什么还不够?@user no。该标题只是告诉浏览器如何解释即将到来的输出;它对其他任何东西都没有影响。页眉(blalbla)只对页面上显示的内容有影响?对吗?非常感谢你的帮助!