插入数据库 (MySQLi) 时出现 ÆØÅ(挪威字母)问题

Problems with ÆØÅ (Norwegian letters) when inserting into database (MySQLi)

我在将挪威语字母 (æøå) 插入数据库时​​遇到问题。我的文档(使用 Notepad++)的字符集编码设置为 UTF-8。被插入的变量有正确的字符,但是当它被插入时,一个词应该显示为“spørsmål”,当插入到数据库中时,显示为“sp_rsm_l".

我正在使用以下代码插入:

$newContent = htmlspecialchars($_POST['newContent']);

$stmt = $mysqli->prepare("UPDATE info SET frontpageText=?");
$stmt->bind_param('s', $newContent);
$stmt->execute(); 
$stmt->close();

并且在连接到数据库时,我尝试使用

$mysqli->set_charset("utf8");
$mysqli->query("SET NAMES 'utf8'");

我还做了以下事情:

关于此的最糟糕的部分是,我实际上已经让它工作得更早了,但我似乎破坏了一些东西(我不知道是什么)。

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

编辑: 问题已解决。显然 table 没有正确设置为 UTF-8。 运行 phpMyAdmin 中的这段代码

ALTER TABLE table_name CHARSET = 'utf8';

您可以将所有字符转换为 html 个字符并以这种方式保存到数据库中。

mb_convert_encoding($string, 'HTML-ENTITIES', 'utf-8');

所有浏览器都会以正确的方式显示它。

确保默认 table 字符集或字段字符集设置为 utf-8。 我知道您说过数据库字符集设置正确,但如果 tables 指定了不同的字符集,可能会干扰它。

字符集和collat​​ion有不同的编码(一个可以是latin1,一个可以是utf8)。

A character set is a set of symbols and encodings. A collation is a set of rules for comparing characters in a character set. Let's make the distinction clear with an example of an imaginary character set.

要诊断 table 的编码,此查询可以是 运行,其中 ##TABLENAME## 应该是实际的 table 名称。

SHOW CREATE TABLE ##TABLENAME##

如果编码不是 utf8,可以用

更改
alter table table_name charset = 'utf8';

这是一个关于排序规则与字符集的话题,What does character set and collation mean exactly?