数据库中查询含有某个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字段包含了各种字符串,包括带有表情符号的字符串。
SELECT *FROM tt6 WHERE name = '12133';
SELECT*FROM tt6 WHERE CAST(name AS BINARY)= '12133';
在 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
本文版权归作者所有,未经作者同意不得转载。
相关文章
- 优化GreatSQL日志文件空间占用 GreatSQL对于日志文件磁盘空间占用,做了一些优化,对于binlog、...03-18
- "数据约束条件" date: 2022-11-24T21:24:31 08:00 draft: false MySQL字段约束条件 无符号, 零填充...03-18
【GreatSQL优化器-16】INDEX_SKIP_SCAN
【GreatSQL优化器-16】INDEX_SKIP_SCAN 一、INDEX_SKIP_SCAN介绍 GreatSQL 优化器的索引跳跃扫描(Index Ski...03-18- MySQL 是一个非常流行的开源关系数据库管理系统,在各种应用场景中都得到了广泛的应用。随...03-18
- 🤖 DB-GPT 是一个开源的 AI 原生数据应用程序开发框架,具有 AWEL(代理工作流表达式语...03-18
GreatSQL 8.0.32-27 GA (2025-3-10)
GreatSQL 8.0.32-27 GA (2025-3-10) 版本信息 发布时间:2025年3月10日 版本号:8.0.32-27, Revision aa66a38591...03-18- 6. MySQL 索引的数据结构(详细说明) @目录6. MySQL 索引的数据结构(详细说明)1. 为什么使用索引2...03-18
- @Override @Transactional(rollbackFor = Exception.class) public void batchInsertDeviceData(IotMsgNotifyData iotMsgNotifyDa...03-18
- 个人Qt项目总结——数据库查询断言问题 问题: 当我使用MySQL数据库的查询操作时, 如果查询...03-18
- MySQL 是一种广泛使用的关系数据库管理系统,MySQL 8 是其最新的主要版本,结合了出色的性能和...03-18
最新评论