mysql - 在数据库中保存表情符号时出现奇怪的字符。这是正常的吗?
问题描述
😋😉😎😀😃
表情符号像(通过表单输入)一样保存在我的数据库(phpmyadmin )中。对我来说,这似乎很奇怪,还是这是正常的?它们以正确的方式显示在我的网站上。所以,没有真正的问题,但我想确保这些奇怪的字符是正确的。我的表格和文本字段具有字符集 utf8mb4_general_ci,并且我<meta charset=utf-8>
在 html 页面上使用。
更新
我进行了进一步的研究,但我还没有找到解决方案。mojibake 已成为问号。这些表情符号现在让我哭了……希望有人知道我做错了什么。
我试图将所有内容都转换为 utf8mb4 和 utf8mb4_unicode_ci(服务器、数据库、表和列)。
我什至在 my.cnf 中设置:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
我还看了问答:
问号(Señor 代表 Señor):
- 要存储的字节未编码为 utf8 / utf8mb4。解决这个问题。我怎样才能解决这个问题?
- 数据库中的列不是 CHARACTER SET utf8(或 utf8mb4)。解决这个问题。(使用 SHOW CREATE TABLE。)。该列具有正确的字符集 (utf8mb4)。
- 此外,请检查连接是否为 UTF-8。我怎样才能检查这个?
我的测试表格是这样的:
<?php
header('Content-Type: text/html; charset=utf-8');
$con = mysqli_connect('*','*','*','*') or exit();
mysqli_set_charset($con, "utf8mb4"); /// without this, it become latin1
///mysqli_query($con, "SET character_set_results = 'utf8mb4', character_set_client = 'utf8mb4', character_set_connection = 'utf8mb4', character_set_database = 'utf8mb4', character_set_server = 'utf8mb4'");
include ($_SERVER['DOCUMENT_ROOT'].'/assets/errors_and_warnings.php');
echo mysqli_character_set_name($con);
echo $_POST['action'];
if (!empty($_POST['bericht'])) {
$bericht = $_POST['bericht'];
} else {
$bericht = 'leeg';
}
echo $bericht;
if (isset($_POST['action'])) {
mysqli_query($con, "INSERT INTO test (bericht, datum)
VALUES ('".mysqli_real_escape_string($con, $bericht)."',
NOW())")
or exit (mysqli_error($con));
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Formulier</title>
</head>
<body>
<br><br>
<form accept-charset="UTF-8" action="<?php $_SERVER['REQUEST_URI'] ?>" method="post" name="test" id="test">
<input name="action" type="hidden" id="action" value="topicplaatsen" />
Bericht:<br />
<textarea name="bericht" cols="40" rows="10" id="bericht">Proeftekst</textarea><br><br>
<input name="imageField" type="image" src="../vormgeving/2010/button/verstuur_blauw.gif"/>
</form>
</body>
</html>
我正在使用 mysql 版本 5.5.60。
解决方案
😋😉😎😀😃
是 Mojibake 的。
它通常意味着latin1
在处理的某个地方涉及。对于 Emoji,您需要CHARACTER SET utf8mb4
,而不仅仅是旧的utf8
.
此问答应该可以帮助您找出缺少的步骤。
它说的一件(几件)事情:HTML表单应该像这样开始<form accept-charset="UTF-8">
更多的
GLOBAL VARIABLES
外观正确;SESSION VARIABLES
似乎没有接受全球价值观或某些东西正在压倒它们。
重新连接失败了吗?
您可以
$con->set_charset('utf8mb4');
在连接之后和执行各种其他查询之前添加。每次使用后检查错误
$con
。
推荐阅读
- javascript - 在返回函数上使用 mixin 函数,而不是函数的值
- sql-server - 如何在 Python 中使用 varbinary 解析原生格式的 BCP 输出文件
- .net-core - '忽略'串行连接上的 DTR
- python - 我的列表框不显示 Treeview 小部件
- c# - 如何从普通数组创建可观察对象?
- python - 如何在 Azure 上部署烧瓶 Rest-API(以图像为输入参数)
- sql - 查看增量行数
- magento2 - 数据迁移后无法保存地址
- firebase - 如何使用 Firebase 存储链接?
- actions-on-google - 在 Google 地图导航模式下无法触发对话操作