数据库中查询含有某个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 ...
随机推荐
- IOS浏览器返回刷新页面
$(function () { var isPageHide = false; window.addEventListener('pageshow', function () { if (isPage ...
- GUI测试稳定性的关键技术
标签(空格分隔): GUI测试稳定性 GUI测试稳定性的关键技术 GUI 自动化测试稳定性,最典型的表现形式就是,同样的测试用例在同样的环境上,时而测试通过,时而测试失败. 这也是影响 GUI 测试健 ...
- 解决BitBucket仓库较大拉取失败,使用SSH拉取
HTTPS 拉取 如果使用的是https拉取,可使用以下命令尝试,如果还是失败,可使用 ssh 拉取 git clone --depth=1 xxxx.git --depth=1:拉取最近1次提交记录 ...
- Java(screw)生成数据库表结构
数据库支持 MySQL MariaDB TIDB Oracle SqlServer PostgreSQL Cache DB(2016) 文档生成支持 html word markdown 方式一:代码 ...
- SpringBoot 整合 Sharding-JDBC 分库分表
导读 分库分表的技术有:数据库中间件Mycat(点我直达),当当网开源的Sharding-JDBC:我们公司用的也是sharding-jdbc,自己也搭建一个完整的项目,直接可以拿来用.下面附源码(C ...
- PLSQL 编码设置
1.先查询plsql编码格式 select userenv('language')from dual 2.新建用户变量,变量名=NLS_LANG,变量值,刚才sql查询的结果 保存后,重启plsql即 ...
- 3分钟带你搞定Spring Boot中Schedule
一.背景介绍 在实际的业务开发过程中,我们经常会需要定时任务来帮助我们完成一些工作,例如每天早上 6 点生成销售报表.每晚 23 点清理脏数据等等. 如果你当前使用的是 SpringBoot 来开发项 ...
- js 做树形数组查询筛选功能
对二级菜单进行搜索查询: watch: { librarySearch(val) { if(val == '') { this.libraryFiles = this.libraryFilesAll ...
- 找实习,三本计算机 > 985文科 ?
2018年3月,大三下学期. 写了一段时间博客以后,竟有人说要内推我. 我说我大三,还没毕业,准备暑假去找实习. 网上认识的朋友建议我去春招实习试试,还有些厂在走流程中,还有机会. 我婉拒了,感觉我自 ...
- pytest-req插件:更简单的做接口测试
pytest-req插件:更简单的做接口测试 背景 我们经常会用到 pytest 和 requests 进行接口自动化测试. pytest 提供了非常方便的插件开发能力,在pytest中使用reque ...