MySQL 如何使用utf8mb4搜索表情
阅读更多:MySQL 教程
什么是utf8mb4?
在MySQL中,默认的字符集是UTF-8,但是UTF-8只支持三个字节的编码,所以无法完全支持所有Unicode字符(其中包括表情符号)。于是,MySQL也提供了另一个字符集,那就是utf8mb4。
UTF-8之所以无法完全支持所有Unicode字符的原因,是因为UTF-8的编码方案只能覆盖 Unicode编码空间中的U+0000到U+FFFF,而表情符号所在的编码空间是U+10000到U+1FFFF。utf8mb4以最多4个字节的方式,支持了所有Unicode字符。
如何搜索表情符号?
若要在MySQL的某个表中,寻找包含某种表情符号的行,需要进行一些准备工作。
首先,更改MySQL数据库当前使用的字符集与排序方式, 以快捷地存储、查看、搜索、输出Emoji表情。
SET NAMES utf8mb4; -- 更改连接的字符集
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; --更改表格的字符集
这样就可以确保数据库连接和表格都使用utf8mb4字符集来支持表情符号。
其次,使用合适的正则表达式进行搜索,如下:
SELECT * FROM `table_name` WHERE `column_name` REGEXP '[\\x{1F600}-\\x{1F64F}]';
该正则表达式支持查找Unicode中所有的卡通表情,如果希望查找特定表情,则需查找该表情在Unicode中对应的编码范围,然后填入到正则表达式中即可。
使用示例
- 创建测试表格
CREATE TABLE `test_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
- 插入含表情的数据
INSERT INTO test_table (name) VALUES ('Hello 。😊');
- 查询含表情的数据
SELECT * FROM `test_table` WHERE `name` REGEXP '[\\x{1F600}-\\x{1F64F}]';
结果返回:
+----+------------------+
| id | name |
+----+------------------+
| 1 | Hello 。😊 |
+----+------------------+
总结
MySQL支持utf8mb4字符集,是为了完全支持所有Unicode字符,包括表情符号,具体做法是更改数据库字符集和表格的字符集。如果希望在表格中搜索表情符号,则需使用正确的正则表达式进行搜索。