gpt4 book ai didi

php - 我应该使用哪种排序规则在 MySQL 中存储这些国家/地区名称?

转载 作者:行者123 更新时间:2023-11-29 09:19:24 26 4
gpt4 key购买 nike

我正在尝试在 mySQL 数据库中存储国家/地区列表。

我在存储(非英语)名称时遇到问题,如下所示:

  • 圣多美和普林西比
  • 萨尔瓦多共和国

它们在数据库中存储有奇怪的字符(因此在我的 HTML 页面中输出奇怪)。

我尝试对数据库和 MySQL 连接排序规则使用不同的排序规则组合:

“明显”的设置是对数据库和连接信息使用utf8_unicode_ci。令我非常惊讶的是,这并没有解决问题。

有人知道如何解决这个问题吗?

[编辑]

事实证明,问题不在于排序,而在于编码,正如 col 所指出的。我注意到在命令行中,我可以输入两个单独的命令:

SET NAMES utf8

followed by

[QUERY]

其中 [QUERY] 是我用于检索名称的 SQL 语句,并且该语句有效(名称不再被破坏)。然而,当我以编程方式(即通过代码)做同样的事情时,我仍然得到损坏的名称。我尝试将这两个语句结合起来,如下所示:

SET NAMES utf8; [QUERY]

在命令行中,这再次返回了正确的字符串。再一次,当我通过代码尝试相同的语句时,我得到了错误的值。

这是我的代码的一个片段:

$mysqli = self::get_db_connection();
$mysqli->query('SET NAMES utf8');

$sql = 'SELECT id, name FROM country';

$results = self::fetch($sql);

the fetch method is:

private static function fetch($query)
{
$rows = array();

if (!empty($query))
{
$mysqli = self::get_db_connection();

if ($mysqli->connect_errno)
{
self::logError($mysqli->connect_error);
}
else
{
if ($result = $mysqli->query($query))
{
if(is_object($result)){
while ($row = $result->fetch_array(MYSQLI_ASSOC))
$rows[] = $row;
$result->close();
}
}
}
}
return $rows;
}

有人能发现我做错了什么吗?

澄清一下,页面中的 HTTP header 设置正确'内容类型': '文本/html;字符集=utf-8'

所以这不是这里的问题。

最佳答案

事实上,排序规则不会产生任何影响。它是用于排序和比较的东西,而不是重新编码。
它负责字符本身的编码。

所以,您的问题不是来自表排序规则,而是来自连接编码

SET NAMES utf8

查询应该可以解决问题,至少对于新插入的数据

关于php - 我应该使用哪种排序规则在 MySQL 中存储这些国家/地区名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2743656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com