我们如何将表情符号保存在 SQL 数据库中以保留它们的唯一性以进行相等比较?

Posted

技术标签:

【中文标题】我们如何将表情符号保存在 SQL 数据库中以保留它们的唯一性以进行相等比较?【英文标题】:How can we save emojis in SQL database to preserve their uniqueness for equality comparisons? 【发布时间】:2021-07-16 13:31:18 【问题描述】:

我们在将表情符号保存到数据库时遇到问题。

我们已将表格列更改为字符集和排序规则,以节省足够的字节以区分表情符号。

这是我们修改表列的查询:

ALTER TABLE TableName MODIFY TableColumn VARCHAR(2048) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

当我们保存以下表情符号时,二进制值如下:

 ♥️  | e2 99 a5 ef b8 8f
???? | f0 9f 90 92
???? | f0 9f 90 b5

一些表情符号 (♥️) 保存有二进制信息,使我们能够将它们区分为唯一/单独的表情符号。

由于我们希望两次保存相同的表情符号,因此对于我们的用例,我们正在检查数据库中的“值”。如果值存在,我们不会保存表情符号。

但是,许多表情符号值,包括 ????和????,被视为相同的值。

因此,当我们尝试保存时 ????还有??????,只有一个得救了……

为什么它们被视为相同的值?

我们怎样才能保存????和 ????作为可识别的不同表情符号,使用 SQL?

我们可以使用更好的字符集或排序规则吗?

我们正在通过单独的存储库访问 mysql 和 MSSql 数据库,这些存储库是在 .NET 框架项目中用 C# 编写的。

【问题讨论】:

您使用的是哪个数据库系统? MySQL?甲骨文? SQL 服务器?请通过编辑问题添加相应系统的标签。您从哪个环境访问数据库? php? 。网?爪哇?请将该信息添加到您的问题中。此外,您能否添加用于连接到数据库的连接字符串,以及可能在连接后更改的连接的任何属性设置 - 如果是这种情况。 我已经更新了这个问题。我们正在使用 MySql 和 MSSQL,并使用 ASP.NET 在 .NET 框架项目中通过用 C# 编写的存储库访问它们。连接字符串因项目状态和当时使用的数据库而异。我们的数据库连接没有问题。 我不确定是什么导致了问题,也许是 SQL 接口中字符串处理中的错误,对于高于 ff ff 的某些 Unicode 值?有趣的是,两个不同的数据库具有相同的效果,这两个数据库都有自己的此类字符串处理例程.. 【参考方案1】:

实际上,您的坐着猴子的代码是错误的!那将是f0 9f 90 92,而不是f0 9f 90 b5。请参阅https://www.fileformat.info/info/unicode/char/1f412/index.htm,UTF-8 十六进制代码。其他两个代码似乎正确。

无论您做什么,错误都不在您显示的代码一侧。

【讨论】:

你说的很对,最后一个字节确实不一样。我已经更新了这个问题,因为 f0 9f 90 92f0 9f 90 b5 两个值在 SQL 中仍然没有被视为 不同 值。

以上是关于我们如何将表情符号保存在 SQL 数据库中以保留它们的唯一性以进行相等比较?的主要内容,如果未能解决你的问题,请参考以下文章

Sklearn CountVectorizer:将表情符号保留为单词

无法将表情符号存储在数据库中

在 ggplot2 geom_text 中以颜色呈现 unicode 表情符号

Regex:过滤特殊字符(如日语),但保留表情符号

在com.rockerhieu.emojicon库中以编程方式设置表情符号大小

如何在 Postgres 中将 url 编码的表情符号保存为文本(例如“%F0%9F%98%80”)? (罗尔)