数据库中查询含有某个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 ...
随机推荐
- Serverless无服务应用架构纵横谈2:边缘计算激战正酣
Serverless无服务应用架构纵横谈2 前言 6年前,我写了一篇<Serverless无服务应用架构纵横谈>. 文中说到无论是公有云FaaS还是私有云FaaS,都不是云计算的未来. 因 ...
- 【漏洞分析】DoughFina 攻击事件分析:不做任何参数检查的去杠杆合约
背景介绍 2024 年 7 月 12 日,DoughFina 协议遭受了黑客攻击,造成本次攻击的主要原因是 ConnectorDeleverageParaswap 合约没有对输入参数进行检查,且该合约 ...
- 使用FModel提取游戏资产
目录 前言 FModel简介 FModel安装 FModel使用 初次使用 资产预览 资产导出 附录 dumper Dumper-7生成usmap文件 向游戏中注入dll 前言 这篇文章仅记录我作为初 ...
- jQuery中hide()和display的区别在于它们实现元素隐藏的方式不同。
1. hide()方法是jQuery提供的一个函数,用于隐藏元素.当使用hide()方法时,元素会被设置为display:none,即不显示在页面上,但仍然占据着原来的空间.隐藏后的元素可以通过调用s ...
- 题解:B3646 数列前缀和 3
分析 板子题,线段树维护矩阵区间积,除了难写没什么思维难度. 所以直接放代码吧. Code #include<bits/stdc++.h> #define int long long us ...
- Vue 根据鼠标悬停目标元素上方显示、隐藏指定元素交互实现
Vue 根据鼠标悬停目标元素上方显示.隐藏指定元素交互实现 By:授客 QQ:1033553122 开发环境 win10 element-ui "2.13.1" vue &qu ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-59 - 判断元素是否显示 - 上篇
1.简介 有些页面元素的生命周期如同流星一闪,昙花一现.我们也不知道这个元素在没在页面中出现过,为了捕获这一美好瞬间,让其成为永恒.我们就来判断元素是否显示出现过. 在操作元素之前,可以先判断元素的状 ...
- 【微信小程序】 全局数据共享
1.什么是全局数据共享 全局数据共享(又叫做:状态管理)是为了解决组件之间数据共享的问题. 开发中常用的全局数据共享方案有: Vuex.Redux. MobX等. 2.小程序中的全局数据共享方案 在小 ...
- 【Game】安装EA的Origin(烂橘子)平台太慢 解决办法
情况是购买了Steam上的爹5,本体下载完成之后需要安装烂橘子平台 然后发现走官方提供下载的平台根本装不上来,安装贼慢 折腾什么配置文件,改HOST都是一些乱七八糟的操作,都没说清楚这干嘛用的 解决方 ...
- Arm V8 - ADRP指令
ADRP指令 作用 将当前指令所在页的基地址加/减去字节差,并写入目标寄存器 字节差:与目标地址页基地址的间隔字节数,其为PAGE_SIZE的整数倍 此时的字节差就是指令所操作的立即数 该指令通常配合 ...