使用PHP将文本插入MySQL数据库时出现字符集问题

使用PHP将文本插入MySQL数据库时出现字符集问题,php,mysql,character-encoding,Php,Mysql,Character Encoding,我正在尝试使用PHP将文本从表单插入MySQL数据库。 问题是,当我检查phpmyadmin中的数据库时,我发现像ü,ö,ä,è,è,è,è这样的特殊字符。。。正在被腐蚀,我得到了类似的东西。我尝试了以下几点: 将accept charset=latin1\u swedish\u ci放入标记中 在php.ini文件中设置default_charset=latin1_swedish_ci 将mysqli_set_charset$dbc放入“拉丁文1_瑞典语ci”;mysql_query'SET

我正在尝试使用PHP将文本从表单插入MySQL数据库。 问题是,当我检查phpmyadmin中的数据库时,我发现像ü,ö,ä,è,è,è,è这样的特殊字符。。。正在被腐蚀,我得到了类似的东西。我尝试了以下几点:

将accept charset=latin1\u swedish\u ci放入标记中 在php.ini文件中设置default_charset=latin1_swedish_ci 将mysqli_set_charset$dbc放入“拉丁文1_瑞典语ci”;mysql_query'SET NAMES latin1_swedish_ci';在mysqli_connect函数之后 将数据库、表和各个列的排序规则设置为latin1_swedish_ci 我注意到直接在phpmyadmin中运行查询时,值没有损坏,因此我认为错误一定是在PHP和/或MySQL连接中。 此外,我还尝试用utf-8_general_ci进行同样的操作,并获得了相同的结果。 它似乎忽视了我所做的一切。 欢迎提出建议和想法。谢谢各位,
Sean

确保排序规则和MYSQL连接排序规则都是拉丁文1_瑞典语u ci

不确定您是否尝试了此方法。。。但我在将希伯来语插入MySQL数据库时遇到了类似的问题。 我做了以下工作: 数据库表的排序规则是:utf8\u unicode\u ci

在PHP中,我这样做:

@ $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
$db->set_charset('utf8');
我创建了一个新连接,然后将连接指定为UTF-8


这解决了我在处理希伯来语时遇到的问题…

我认为您应该将页面的字符编码设置为:

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

我不能正确地说这是否是您的问题的原因,但无论如何,您不能将字符集和排序规则的Mysql说明符放入HTML表单或PHP.ini中

现在你有点盲目地使用MySQL值,把它放在任何你认为合适的地方——甚至不知道。不要那样做。首先,决定要使用并接受哪种编码。根据你的问题,我会说那是拉丁语

因此,适当配置HTML和PHP:

<form accept-charset="latin1">
更正这两个设置后,浏览器会知道包含表单的页面的编码是什么,表单甚至会向浏览器发出信号,告知返回服务器的数据的接受编码

因此,这应该确保PHP变量中的数据是latin1编码的。如果正确配置了数据库客户端、数据库服务器的编码、两者之间连接的编码以及数据库中数据的编码,则可以将此数据传递到数据库中

但是,正确设置表单是确保mysql连接不会出现问题之前需要做的第一步。

您可以使用

mysql_query("set character_set_results='utf8'");
在为那些希伯来语用户执行MySQL查询之前:

HTML页面:

数据库,表,FEILDs排序规则


utf8_general_ci

包含表单的页面的字符编码是什么?accept charset=latin1_swedish_ci不是有效的HTML。请使用合适的字符集,请参阅。您可能正在寻找latin1,。您的问题似乎是您不知道MySQL如何处理字符集,因此,上面提到的场景有点混乱。上面你说的第一部分-我检查了phpmyadmin中的数据库,我发现像ü,ö,ä,è,è,è,è这样的特殊字符。。。正在被破坏,我得到了像üÃÃÃÃÃÃÃÃÃÃ这样的东西,然后你说-我注意到直接在phpmyadmin中运行查询时,值没有被破坏。请确保您在PHPMYADMIN中发现数据损坏?谢谢您的回复。好的,只有当我尝试使用我的PHP脚本插入记录时才会发生损坏,而不是当我直接在phpmyadmin中运行查询时。我认为排序规则与此无关。我也遇到了同样的问题,通过更改数据库的排序规则解决了问题,不知道,也许我很幸运:OP正在寻找拉丁1编码,不是UTF-8。我是这样做的:$dbc=@mysqli\u connectDB\u主机、DB\u用户、DB\u密码、DB\u名称或die“无法连接到MySQL:”。mysqli_connect_错误;mysqli_set_charset$dbc,'latin1_瑞典_ci';mysql_query'SET NAMES latin1_swedish_ci';好我是用UTF-8做的,这并不意味着同样的事情不能用拉丁语1_-swedish_ci做——下次我会确保包括问题中要求的确切编码`非常感谢您抽出时间回复!非常感谢。感谢您的建议,我成功地解决了这个问题,因为我没有将PHP变量设置为“latin1”,而是设置为“latin1_swedish_ci”,正如您所指出的,这在HTML中是不正确的,在PHP.ini文件中不起作用。谢谢,祝你今天愉快!
mysql_query("set character_set_results='utf8'");
<html lang="he">
  <head>
    <meta charset="utf-8">
header('Content-Type: text/html; charset=UTF-8');
$con = mysqli_connect("HOST","DB_USER","PASSWORD","DB_NAME");
$con->set_charset('utf8');