插入数据库时​​遇到ÆØÅ(挪威字母)的问题(MySQLi)

时间:2015-07-01 23:44:40

标签: php mysql utf-8

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

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

$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标题)
  • 使用元charset="utf-8"(在HTML头中)
  • 文档本身以utf-8
  • 编码
  • 尝试运行SET NAMES utf8;

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

任何人都知道如何解决这个问题?

编辑:问题已解决。显然,该表未正确设置为UTF-8。在phpMyAdmin中删除此代码

ALTER TABLE table_name CHARSET = 'utf8';

3 个答案:

答案 0 :(得分:3)

字符集和排序规则有单独的编码(一个可以是latin1,另一个可以是utf8)。

  

字符集是一组符号和编码。排序规则是一组用于比较字符集中字符的规则。让我们用虚构字符集的例子来区分。

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

SHOW CREATE TABLE ##TABLENAME##

如果编码不是utf8,可以用

更改
alter table table_name charset = 'utf8';

这是关于整理与字符集What does character set and collation mean exactly?的一个主题。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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