数据库中查询含有某个emoji表情的行数据

数据库中查询含有某个emoji表情的行数据

 

MySQL的情况

代码如下

​
create table tt6(id int, name varchar(800));
insert into tt6 select 1, '121😊33';
insert into tt6 select 2, 'ddd';
insert into tt6 select 3, '3669Ef';
​
​
select * from tt6

同样,name字段包含了各种字符串,包括带有表情符号的字符串。

 

现在我们直接进行比较

​
SELECT * FROM tt6 WHERE name = '121😊33';
SELECT * FROM tt6 WHERE BINARY name = '121😊33';

在 MySQL 中,varchar 或 char 列在使用 utf8mb4 字符集时,支持大部分 Unicode 字符,并且默认比较是基于字符集和排序规则的。这意味着你可以直接使用 = 操作符进行字符串比较。

SELECT * FROM tt6 WHERE name = '121😊33'; 这样的查询基于默认的排序规则来进行比较。

另外,MySQL 提供了 BINARY 关键字,可以将字符串转换为二进制格式来进行逐字节比较。

SELECT * FROM tt6 WHERE BINARY name = '121😊33'; 这样的查询会忽略排序规则,直接比较每个字符的字节值。

当然,MySQL在这里同样有一个优化,就是当你输入BINARY name 时候,告诉优化器等号两边都用字节比较,数据库自动将等号右边的数值转为字节。

 


 

 

SQL Server的情况
代码如下

create table tt6(id int, name nvarchar(800));
insert into tt6 select 1, '121😊33';
insert into tt6 select 2, 'ddd';
insert into tt6 select 3, '3669Ef';
​
select * from tt6

在这个表中,name字段包含了各种字符串,包括带有表情符号的字符串。

在 SQL Server 中,当你使用 nvarchar 或 varchar 数据类型进行比较时,数据库会按照列的排序规则(collation)来进行比较和处理Unicode字符。

这种比较方式通常考虑了字符的语义。

SELECT * FROM tt6 WHERE name = '121😊33';  这样的查询会根据列的排序规则进行比较。
另外,SQL Server 提供了 CAST(... AS BINARY) 的方式将字符串转换为二进制数据进行比较,这样可以确保比较的是字符串的字节级别的值。
SELECT * FROM tt6 WHERE CAST(name AS BINARY) = '121😊33'; 这样的查询会逐字节进行比较,以确保精确匹配。

当然,SQL Server在这里有一个优化,就是当你输入where cast(name as binary) 时候,告诉优化器等号两边都用字节比较,数据库自动将等号右边的数值转为字节,而不需要你在等号右边写CAST('121😊33' as binary);

 


 

总结

在 SQL Server 和 MySQL 中,既可以使用二进制比较,也可以直接进行字符串比较,这是因为两者都提供了不同层次的比较方式以满足不同的需求。

字符串比较和二进制比较的基本概念

  • 字符串比较:通常情况下,字符串比较是基于字符集和排序规则(collation)的。它在比较字符时考虑了字符的语义(如大小写敏感性、重音符号等),而不是简单的字节序列。
  • 二进制比较:二进制比较则是逐字节进行的,完全基于每个字符的实际二进制值。这种比较方式忽略了字符集的排序规则,只关注字符的字节表示。

 

 

 

参考文章

https://blog.sqlauthority.com/2020/02/28/sql-server-displaying-smiley-in-ssms-emoji/
https://www.reddit.com/r/SQL/comments/fasio7/sql_server_supports_emoji_in_identifier_names/?rdt=40804
https://www.genelify.com/blog/how-to-store-emoji-into-mysql-database#google_vignette
https://www.codeproject.com/Questions/5354414/How-to-store-emojis-in-a-mysql-table-Tried-everyth

 

 

 

 

本文版权归作者所有,未经作者同意不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/791427.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

24.9.2——小学期开发实记

1.IDEA导入项目出现Error: java: 程序包javax.servlet.http不存在错误的解决办法 解决方法:打开File>Project Structure>Libraries,点击右侧加号,寻找到tomcat的lib文件夹。 2.IDEA控制台乱码问题对象的知识: 在 Java 中,使用 new 关键字创建对象时:堆内存分配: 首…

读软件开发安全之道:概念、设计与实施16安全开发最佳实践

安全开发最佳实践1. 安全测试的最佳实践 1.1. 编写可靠的安全测试用例是提升任何代码库安全性的重要方式 1.2. “测试驱动的开发”(Test Driven Development,TDD)1.2.1. 在编写新代码的同时编写测试用例1.3. 利用集成测试1.3.1. 集成测试(integration testing)可以把系统置于它…

C#|.net core 基础 - 如何判断连续子序列

想判断一个集合是不是另一个集合的连续子序列,你能想到什么方法?序列化字符串后再比较和滑动窗口那个更靠谱?前两天同事遇到了一个小需求,想判断一个集合是不是在另一个集合中存在,并且要求顺序一致,然后一起讨论了下应该怎么做,有没有什么比较好的方式?下面分享一下我…

全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法

在 Python 中,内置类型的行为是通过一组特殊的“魔法方法”来实现的,这些魔法方法以双下划线开头和结尾,比如 init 和 str,你可以通过重写这些魔法方法来定制或扩展内置类型的行为。全网最适合入门的面向对象编程教程:44 Python 内置函数与魔法方法-重写内置类型的魔法方法…

软件工程课程第一次个人作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13243这个作业的目标 开始初步学习软件工程,掌握学习的基础和必备条件,为后续学习做准备学号 1022011401.Markdown编辑器2.个人logo…

Python 环境配置(三)安装pytorch

Python 环境配置(三)安装pytorch 一、CUDA 安装CUDA视安装的Pytorch版本而定,GPU版本 需要 安装CUDA,CPU版本 无需 安装CUDA。 1、查看驱动版本 方法一:方法二:2、下载 CUDA Toolkit Archive | NVIDIA Developer选择对应的版本,对应的!!!此后依次选择下载即可注意 wi…

财务知识-合并报表底层逻辑

合并报表如何拆分,如何勾稽,下面两张图教会你!↓

Typora 适配高版本 Mermaid

Typora 适配高版本 Mermaid 查看 Mermaid 版本 info下载最新的 mermaid.min.js文件 在搜索框输入 CDN https://cdn.jsdelivr.net/npm/mermaid@11/替换 Typora 的 window.html 文件 <script>const interval = setInterval(() => {console.log(check mermaid...);if (wi…

工作流之Activiti7 和BPMN讲解

目录1 Activiti1.1 简介1.2 BPMN1.2.1 简介1.2.2 符号1.3 准备工作1.3.1 安装插件1.3.1.1 插件1.3.1.2 本地网页1.3.2 pom依赖1.3.3 添加配置1.3.4 表介绍1.3.5 常用Service服务介绍1.4 无校验操作流程1.4.1 部署&查看文件1.4.1.1 单个文件部署方式1.4.1.2 静态类部署1.4.1…

Python用CNN+LSTM+Attention对新闻文本分类、锂离子电池健康、寿命数据预测

全文链接:https://tecdat.cn/?p=37561 原文出处:拓端数据部落公众号分析师:Weiqiao Jue 在当今的数字化时代,数据的爆炸式增长既带来了机遇,也带来了挑战。如何从海量的数据中高效地提取有价值的信息,并进行准确的分类和预测,成为了众多领域亟待解决的关键问题。 本研究…

【专题】2024年企业数字化人才实践研究报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=37556 在当今时代,数字化转型已然成为不可逆转的变革趋势。经过多年的持续发展,中国企业的数字化转型已然迈进了 “深水区”。对于众多企业来说,当下在数字化转型过程中最为迫切需要解决的问题,便是如何在已有的数字化成果基础上进行再度创…

博客内容规范

之前虽然用GitHub Pages建立了个静态博客,但是由于访问速度的问题,我便把内容迁移到了Gitee Pages上,谁能想它直接跑路了,至今还没有发一个字的公告。一波操作,我又迁回了GitHub,但是又想到一个人孤独写博客,还把内容放到GitHub上,访问慢、没人看,更没法和别人交流,感…