美文网首页
MySQL字符排序

MySQL字符排序

作者: 诺之林 | 来源:发表于2018-09-26 23:16 被阅读17次

关于MySQL字符集 可以参考文章MySQL字符集 & 重谈MySQL字符集

目录

大小写

  • _ci(case insensitive) 大小写不敏感

  • _cs(case sensitive) 大小写敏感

CREATE DATABASE IF NOT EXISTS collation_demo DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

USE collation_demo;

CREATE TABLE t1 (
id int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
content varchar(255) NOT NULL
) DEFAULT CHARSET=utf8;

INSERT INTO t1 ( content ) VALUES ( 'china' );

INSERT INTO t1 ( content ) VALUES ( 'China' );
SELECT * FROM t1 WHERE content = 'china';
# Time: 0.018s
+----+---------+
| id | content |
+----+---------+
| 1  | china   |
| 2  | China   |
+----+---------+
SELECT * FROM t1 WHERE content = 'China';
# Time: 0.020s
+----+---------+
| id | content |
+----+---------+
| 1  | china   |
| 2  | China   |
+----+---------+
ALTER TABLE t1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_cs;
# (1273, "Unknown collation: 'utf8_general_cs'")

ALTER TABLE t1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
# Query OK, 2 rows affected
SELECT * FROM t1 WHERE content = 'china';
# Time: 0.020s
+----+---------+
| id | content |
+----+---------+
| 1  | china   |
+----+---------+
SELECT * FROM t1 WHERE content = 'China';
# Time: 0.018s
+----+---------+
| id | content |
+----+---------+
| 2  | China   |
+----+---------+

比较规则

  • _bin 按位比较 (大小写二进制值不同)

  • _general 按字节比较?

  • _unicode 按unicode规则比较

TRUNCATE t1;

ALTER TABLE t1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

INSERT INTO t1 ( content ) VALUES ( 'ij' );

INSERT INTO t1 ( content ) VALUES ( 'ij' );
SELECT * FROM t1 WHERE content = 'ij';
# Time: 0.018s
+----+---------+
| id | content |
+----+---------+
| 1  | ij      |
+----+---------+
SELECT * FROM t1 WHERE content = 'ij';
# Time: 0.017s
+----+---------+
| id | content |
+----+---------+
| 2  | ij       |
+----+---------+
ALTER TABLE t1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
SELECT * FROM t1 WHERE content = 'ij';
# Time: 0.061s
+----+---------+
| id | content |
+----+---------+
| 1  | ij      |
| 2  | ij       |
+----+---------+
SELECT * FROM t1 WHERE content = 'ij';
# Time: 0.020s
+----+---------+
| id | content |
+----+---------+
| 1  | ij      |
| 2  | ij       |
+----+---------+

unicode有更高的精度 但general有更高的效率

参考

相关文章

  • 八、MySQL字符集

    字符集和排序规则简介   MySQL提供了多种字符集和排序规则选择,其中字符集设置和数据存储以及客户端与MySQL...

  • MySQL字符排序

    关于MySQL字符集 可以参考文章MySQL字符集 & 重谈MySQL字符集 目录 大小写 比较规则 大小写 _c...

  • 如何在mysql中实现自然排序

    背景 熟悉mysql的同学应该清楚,mysql在对字符串做order by排序时是按照字典序进行排序的,但是如果字...

  • 数据库语言杂记

    MySQL ORDER BY 排序 IF 及 IN 字符串连接函数concat() MySQL练习题:练习题一 ...

  • 如何创建MySql数据库

    一般我们创建mysql数据库,首先需要做的事,是选择“字符集”,然后选择“排序规则”。 字符集:utf8排序规则:...

  • MySQL字符集和字符排序

    mysql的字符集和字符序:字符序:字符序(Collation)是指在同一字符集内字符之间的比较规则一个字符序唯一...

  • mysql进阶操作基础篇(一)

    默认mysql字符串编码字符集:utfmb4排序规则:utf8mb4_general_ci → 该设置字段不区分...

  • 全栈小知识-mysql将字符串转换成数字

    在mysql数据库中,如果排序字段是字符串类型的数字,需要先转换成数字在进行排序,格式如下: CONVERT属于字...

  • [Mysql教程系列] order by 多字段排序

    mysql单个字段降序排序: mysql单个字段升序排序: mysql多个字段排序: 多字字段排序只需要添加多个排...

  • js算法

    排序算法 冒泡排序 快速排序 字符串操作 判断回文字符串 翻转字符串 反向遍历字符串 function reve...

网友评论

      本文标题:MySQL字符排序

      本文链接:https://www.haomeiwen.com/subject/bpnhgftx.html