插入数据库 (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'");
我还做了以下事情:
- 数据库排序规则设置为
utf8_danish_ci
- 使用
header('Content-type: text/html; charset=utf-8');
(PHP header)
- 使用元
charset="utf-8"
(在 HTML-head)
- 文档本身使用 utf-8 编码
- 尝试过运行
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 指定了不同的字符集,可能会干扰它。
字符集和collation有不同的编码(一个可以是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?。
我在将挪威语字母 (æøå) 插入数据库时遇到问题。我的文档(使用 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'");
我还做了以下事情:
- 数据库排序规则设置为
utf8_danish_ci
- 使用
header('Content-type: text/html; charset=utf-8');
(PHP header) - 使用元
charset="utf-8"
(在 HTML-head) - 文档本身使用 utf-8 编码
- 尝试过运行
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 指定了不同的字符集,可能会干扰它。
字符集和collation有不同的编码(一个可以是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?。