我使用 Collation latin1_swedish_ci 设置了一个 MySQL 表。我已经用 UTF-8 字符集编写了我的 PHP 脚本。一切都很顺利,直到我发现有人用非瑞典字符输入了他们的名字。海伦这个名字在数据库中看起来很奇怪,但在网页上看起来还不错。
我的问题是,我可以简单地将我的表的排序规则从 latin1_swedish_ci 更改为 UTF-8 吗?
它实际上会导致任何问题吗?
您可以通过添加来做到这一点
$db->set_charset("utf8"); // MySQL
mb_internal_encoding("UTF-8"); // Set PHP encoding
header("Content-Type: text/html; charset=utf-8"); // Prevent incorrect encoding in Browser
在顶部并使用转义每个参数
$param=$db->escape_string($param);
然后 MySQL/PHP 将为您处理与编码相关的所有内容。当你这样做时,你所有的东西都将是 UTF-8。
您的名称问题可能与 header() 命令有关,这意味着浏览器选择了除 PHP 之外的另一个字符集。您可以通过以下方式修复数据:
$data=utf8_encode($data);
如果产生不好的结果,试试这个:
$data=utf8_decode($data);
之后,一切看起来都很好。
如果您想让 UTF8 成为默认字符集,请考虑在 [mysqld] 中的 my.cnf 中添加以下内容:
# Set UTF-8 as standard
collation-server = utf8mb4_general_ci
init-connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
这就是我所做的,自开发一年以来,我在这篇文章中提到的所有内容都没有遇到任何问题。