繁体   English   中英

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

[英]Which collation should I use to store these country names in MySQL?

我正在尝试在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标头已正确设置为“ Content-type”:“ text / html; 字符集= UTF-8'

所以那不是这里的问题。

如果您在任何地方都使用uf8 *,它将起作用-好像您忘记了任何东西

*无处不在意味着: 对于数据库排序规则和-连接,对于(php?)脚本文件,以及对于发送到浏览器的页面(通过设置元标记或更好地设置uftf-8标头)

实际上, collation不会影响任何种类。 这是用于排序和比较的东西,而不是重新编码的东西。
它负责字符本身的encoding

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

SET NAMES utf8

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM