数据库中查询含有某个emoji表情的行数据
数据库中查询含有某个emoji表情的行数据
MySQL的情况
代码如下
create table tt6(id int, name varchar(800));
insert into tt6 select 1, '12133';
insert into tt6 select 2, 'ddd';
insert into tt6 select 3, '3669Ef';
select * from tt6
同样,name字段包含了各种字符串,包括带有表情符号的字符串。

现在我们直接进行比较
SELECT * FROM tt6 WHERE name = '12133';
SELECT * FROM tt6 WHERE BINARY name = '12133';

在 MySQL 中,varchar 或 char 列在使用 utf8mb4 字符集时,支持大部分 Unicode 字符,并且默认比较是基于字符集和排序规则的。这意味着你可以直接使用 = 操作符进行字符串比较。
SELECT * FROM tt6 WHERE name = '12133'; 这样的查询基于默认的排序规则来进行比较。
另外,MySQL 提供了 BINARY 关键字,可以将字符串转换为二进制格式来进行逐字节比较。
SELECT * FROM tt6 WHERE BINARY name = '12133'; 这样的查询会忽略排序规则,直接比较每个字符的字节值。
当然,MySQL在这里同样有一个优化,就是当你输入BINARY name 时候,告诉优化器等号两边都用字节比较,数据库自动将等号右边的数值转为字节。
SQL Server的情况
代码如下
create table tt6(id int, name nvarchar(800));
insert into tt6 select 1, '12133';
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 = '12133'; 这样的查询会根据列的排序规则进行比较。
另外,SQL Server 提供了 CAST(... AS BINARY) 的方式将字符串转换为二进制数据进行比较,这样可以确保比较的是字符串的字节级别的值。
SELECT * FROM tt6 WHERE CAST(name AS BINARY) = '12133'; 这样的查询会逐字节进行比较,以确保精确匹配。
当然,SQL Server在这里有一个优化,就是当你输入where cast(name as binary) 时候,告诉优化器等号两边都用字节比较,数据库自动将等号右边的数值转为字节,而不需要你在等号右边写CAST('12133' 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

本文版权归作者所有,未经作者同意不得转载。
数据库中查询含有某个emoji表情的行数据的更多相关文章
- 从Oracle数据库中查询前几个月数据时需要注意的一些问题
在最近的一个项目中,有一个需求就是要查询数据库中前几个月的历史数据,但是由于自己考虑不全面造成了程序的bug,现在将这一块好好作一个总结,希望以后不再犯这种很低级的错误,首先贴出查询中用到的一个子函数 ...
- MongoDB数据库中查询数据(下)
MongoDB数据库中查询数据(下) 在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍: 1. fields; 该属性值为一 ...
- 在MongoDB数据库中查询数据(上)
在MongoDB数据库中查询数据(上) 在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.fi ...
- flask再学习-思考之怎么从数据库中查询数据在页面展示!
看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...
- 使用JDBC从数据库中查询数据的方法
* ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回 ...
- Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令
Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令 ------------------------------------------------------------------ ...
- JDBC方式从数据库中查询数据并显示
1.创建数据库表myuser DROP TABLE IF EXISTS `myuser`; CREATE TABLE `myuser` ( `) NOT NULL COMMENT '姓名', `id` ...
- eImage(仅两行代码实现输出从数据库中查询到的二进制字段)标签
功能: 专门用于向浏览器输出从数据库中查询到的二进制字段.支持通用的几十种文件类型 别名为edoc 使用方法: <chtml><eimage id=书包名type=类型>key ...
- JavaWeb-SpringSecurity在数据库中查询登陆用户
系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 JavaWeb-SpringSecurity在数据库中查询登陆用户 传送门 JavaWeb-Sp ...
- SpringMvc处理模型数据(也就是从数据库中查询出来的数据放到请求域中)
这讲的是从数据库中查询到的数据,存放到请求域中.然后页面上直接可以从请求域中获取值. 有4种方式: 1):ModelAndView 是作为一个对象. /** * 目标方法的返回值可以是 Model ...
随机推荐
- (Java)日志框架体系整理
# JUL 指的是Java Util Logging包,它是Java原生的日志框架,使用时不需要另外引用第三方的类库,相对其他的框架使用方便,学习简单,主要是使用在小型应用中.@紫邪情 # JUL的组 ...
- .Net Core 访问 appsettings.json
1.添加 NuGet 包 Microsoft.Extensions.Configuration 2.通过注入获取 Configuration 注意:注入获取的必须提前在 StartUp 里面提前注册 ...
- WEB入门 - 文件上传
WEB入门 - 文件上传 参考文章 https://fushuling.com/index.php/2023/08/20/ctfshow刷题记录持续更新中/ https://www.cnblogs.c ...
- suffix-icon属性隐藏el-select下拉框右边的下拉图标
<el-form-item label="入库类型" prop="mt_type"> <el-select v-model="for ...
- oeasy 教您玩转 linux 010215 随机谚语 fortune
我们来回顾一下 上一部分我们都讲了什么? 把图像转化为了ascii️字符画 并且修改了cowsay的图像素材的位置 我们想要让牛讲一个随机的笑话 首先我们要有个说笑话的软件包 # 下载fortune ...
- Langchain 与 LlamaIndex:LLM 应用开发框架的比较与使用建议
Langchain 和 Llamaindex 是两种广泛使用的主流 LLM 应用开发框架.两者有什么不同?我们该如何使用?以下我根据各类资料和相关文档做了初步选型. 一.Langchain 1. 适用 ...
- MySQL 纵表转横表查询实现
纵表转横表查询实现 By:授客 QQ:1033553122 欢迎加入全国软件测试交流群:7156436 实践环境 MySQL 5.7 创建测试表 CREATE TABLE tb_test ( id I ...
- 搭建lnmp环境-php(第二步)
系统环境:centos7 php7.4 编译安装太繁琐,这里用yum安装即可 ===========yum形式安装======== # 安装EPEL源(nginx那里已安装了,跳过) yum inst ...
- springboot中事务失效的一些场景以及如何应对
@Transactional是基于AOP的,因此事务发生需要两个条件: 1.添加@Transactional注解 2.使用代理对象 失效场景:同一个类中直接调用的类方法,而被调方法带有@Transac ...
- 微服务:nacos服务注册与发现
服务治理的三个角色: 服务提供者:订阅服务 服务消费者:注册服务 注册中心:记录与监控服务状态,推送服务变更信息.提供者定时发送心跳检测,心跳检测失败,就会向消费者推送变更 提供者通过负载均衡的算法选 ...