Php 转换为mysqli_query()后,utf8字符错误显示为问号
我的数据库是latin1_swedish_ci,但所有包含外来字符(德语、土耳其语…)的表都是utf8_general_ci 在升级到PHP5.6之前,我使用Php 转换为mysqli_query()后,utf8字符错误显示为问号,php,mysql,utf-8,character-encoding,Php,Mysql,Utf 8,Character Encoding,我的数据库是latin1_swedish_ci,但所有包含外来字符(德语、土耳其语…)的表都是utf8_general_ci 在升级到PHP5.6之前,我使用 mysql_query("SET CHARACTER SET utf8;"); mysql_query("SET NAMES utf8"); 在mysql\u query()之前,所有内容都正确显示在我的页面中(在页面标题中) 在将所有的mysql\u查询(…)转换为mysqli\u查询(id…)并在PHP5.6下运行之后,所有的外语
mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET NAMES utf8");
在mysql\u query()
之前,所有内容都正确显示在我的页面中(
在页面标题中)
在将所有的mysql\u查询(…)
转换为mysqli\u查询(id…)
并在PHP5.6下运行之后,所有的外语现在都被打乱了?及�. 切换回PHP5.4没有帮助。phpMyAdmin正确显示mysql数据库(未更改)
我四处寻找解决方案,但没有任何效果。。。我错过什么了吗
我需要在代码中更改什么才能正常工作?这些乱七八糟的字符是浏览器或其他用户可见的软件包的结果,该软件包将utf-8字符呈现为ASCII或拉丁语-1 编辑在Chrome浏览器中,您可以查看浏览器呈现页面时使用的编码。单击右上角的chrome菜单(三条小水平线)。单击更多工具>单击编码>然后您将看到字符集的选择。试着选择一个不同的 尝试将这一行放入HTML文档的
部分
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
这可能会强制浏览器使用正确的字符集
结束编辑
切换到mysqli后,在打开mysql会话时,是否保留了设置字符集
和设置名称
查询?如果没有,把它们放回去,看看是否有帮助
您的数据库可能工作正常,但php告诉浏览器您使用的是Latin-1。事实上,这很可能是因为phpmyadmin工作正常
尝试执行此处建议的操作:
关于字符集和排序规则有很多概念上的混淆。当你说
我的数据库是拉丁语和瑞典语
您的意思是,新定义的表的默认字符集是
latin1
,默认排序规则是不区分大小写的。这些只是默认设置。对于数据存储来说,重要的是用于每列的字符集。你说那是utf8
。排序规则(utf8\u general\u ci
)仅用于搜索和匹配。反复搜索后
这是解决办法
在我的php脚本中,我必须在连接到数据库之后添加一个字符集查询
$con=mysqli_connect($host",$user,$password,$db);
mysqli_set_charset($con,"utf8");
在php 5.4之前,我在mysql_query()中使用的字符集和名称已经不够了
mysqli_query($con,"SET CHARACTER SET utf8;");
mysqli_query($con,"SET NAMES utf8");
在我的本地服务器上,在添加了包含以下行的my.cnf文件后,我还必须重新编译mysql:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-storage-engine = InnoDB
character-set-client-handshake
collation-server=utf8_general_ci
character-set-server=utf8
[mysqld_safe]
default-character-set=utf8
<charset name="utf8">
<family>Unicode</family>
<description>UTF8 Unicode</description>
<alias>utf8</alias>
<collation name="utf8_general_ci" id="33">
<flag>primary</flag>
<flag>compiled</flag>
</collation>
<collation name="utf8_bin" id="83">
<flag>binary</flag>
<flag>compiled</flag>
</collation>
</charset>
我还必须通过编辑MAMP/Library/share/charsets/index.xml并添加以下行,将utf8字符集添加到MAMP中:
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-storage-engine = InnoDB
character-set-client-handshake
collation-server=utf8_general_ci
character-set-server=utf8
[mysqld_safe]
default-character-set=utf8
<charset name="utf8">
<family>Unicode</family>
<description>UTF8 Unicode</description>
<alias>utf8</alias>
<collation name="utf8_general_ci" id="33">
<flag>primary</flag>
<flag>compiled</flag>
</collation>
<collation name="utf8_bin" id="83">
<flag>binary</flag>
<flag>compiled</flag>
</collation>
</charset>
统一码
UTF8 Unicode
utf8
主要的,重要的
汇编
二元的
汇编
在我的web服务器上,上述两个步骤是不必要的。我也有同样的问题。
不确定这是否有帮助,但作为一个noob,我无法理解或实现这个问题答案的复杂性
首先,我将其添加到我的html页面:
然后,我进入PHPMyAdmin,点击我在浏览器中看到菱形圆圈问号的专栏,然后简单地在数据库级别将编码重置为UTF-8
我希望这会有帮助。当然对我来说很容易
“转换”相当模糊。有几个步骤;请详细说明。另外,提供
从tbl中选择列、十六进制(列),其中代码>用于某些非ascii字符串。这将有助于确定损坏的程度。我所说的转换是指:用新的mysqli更改旧的php-mysql函数的所有实例。这就是我所做的一切,因此我的网站将在PHP5.6下正确显示。在转换之前,所有外来字符都显示正确。数据库是拉丁语,但所有包含外来字符的表和字段都是utf8。在转换过程中,数据库、表或字段未发生任何更改。Ollie提供的链接上的建议解决方案。。。在php.ini文件中添加default_charset=“utf-8”行对我的本地服务器没有帮助。此外,这一变化不会影响其他只包含拉丁字符的网站吗?在我看来,数据库工作正常,因为它与旧的php mysql函数配合良好,并且因为phpmyadmin正确地显示了它。顺便说一句,在从数据库读取数据之前,我确认我仍在进行设置字符集和设置名称的mysqli查询。谢谢@paulgodard。查询这个集合字符集utf8
和集合名称utf8
对我很有用!如果这个答案对你有效,请选择它作为答案。这个答案应该被检查为最佳答案。