首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 默认的排序规则

MySQL默认的排序规则是utf8_general_ci。这个排序规则是基于Unicode的,它对字符串进行比较和排序时,会考虑到字符的权重,并且是不区分大小写的(case insensitive)。

基础概念

  • 排序规则(Collation):MySQL中的排序规则定义了字符如何比较和排序。它决定了不同语言和字符集之间的比较行为。
  • utf8_general_ci:这是MySQL中针对UTF-8字符集的一种通用排序规则,ci表示“Case Insensitive”,即不区分大小写。

优势

  • 通用性utf8_general_ci适用于大多数语言和场景,特别是当不需要特定语言的复杂排序规则时。
  • 性能:相对于其他更复杂的排序规则,utf8_general的_ci在比较和排序操作上可能具有更好的性能。

类型

MySQL中的排序规则类型主要包括:

  • 二进制:如utf8_bin,区分大小写,且对每个字节进行比较。
  • 不区分大小写:如utf8_general_ci,在进行比较时不考虑字符的大小写。
  • 区分大小写:如utf8_bin或特定语言的排序规则,如latin1_swedish_ci

应用场景

  • 多语言支持:当数据库需要存储和检索多种语言的数据时,使用适当的排序规则可以确保数据的正确排序和检索。
  • 性能优化:在某些情况下,选择性能更好的排序规则可以提高数据库的查询性能。

可能遇到的问题及解决方法

问题:为什么使用utf8_general_ci时,某些特殊字符的排序结果不符合预期?

原因utf8_general_ci虽然适用于大多数情况,但它可能无法完全满足某些特定语言或文化的排序需求。特别是对于那些具有复杂排序规则的语言(如瑞典语、德语等),utf8_general_ci可能无法正确处理某些特殊字符。

解决方法

  1. 选择更具体的排序规则:根据具体需求选择更适合的排序规则。例如,对于德语数据,可以选择latin1_german1_ciutf8_german_ci
  2. 自定义排序规则:如果现有的排序规则无法满足需求,可以考虑创建自定义的排序规则。

示例代码

代码语言:txt
复制
-- 查看当前数据库的默认排序规则
SHOW VARIABLES LIKE 'collation%';

-- 更改表的排序规则
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

-- 创建新表时指定排序规则
CREATE TABLE new_table (
    id INT PRIMARY KEY,
    name VARCHAR(255)
) CHARACTER SET utf8 COLLATE utf8_general_ci;

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL 排序规则

排序规则是一组用于比较字符集中字符规则。 每个 MySQL 字符集可以支持一个或者多个排序规则,用于定义每个字符比较规则,包括是否区分大小写,是否区分重音等。...2.支持排序规则 MySQL 使用 SHOW COLLATION 语句查看各种字符集支持排序规则: SHOW COLLATION [LIKE 'pattern' | WHERE expr]...这是MySQL内部使用标识符。 Default:是否为默认排序规则。如果是默认排序规则,将显示“Yes”;否则,显示“”No”。 Compiled:是否已编译排序规则。...如果没有指定排序规则MySQL 会基于字符集设置一个默认排序规则。...英文通常按照字母排序,而中文通常按照拼音、偏旁部首或者笔画进行排序MySQL 8.0 默认使用排序规则 utf8mb4_0900_ai_ci 对于中文按照偏旁部首进行排序

43720

MySQL order by不同排序规则

explain语句执行结果中,Extra项中含有Using filesort表示需要排序MySQL会给每个线程分配一块内存用于排序,称为sort_buffer。...当排序字段较多时,内存可放下行数很少,需要分成很多个临时文件,排序性能很差,即MySQL认为排序单行长度太大会使用rowid排序。...对sort_buffer中数据按order by条件进行排序。 遍历排序结果,取数据返回。...控制用于排序行数据长度,单行长度超过该值,MySQL更换排序算法 SET max_length_for_sort_data = 16; 使用索引排序 语句执行流程: 从索引找到第一个满足where...使用覆盖索引时,explain语句Extra字段会多了个"Using index",表示使用索引覆盖。 MySQL一个设计思想:如果内存够,就要多利用内存,尽量减少磁盘访问。

31140
  • mysql:深究 sql 默认排序 order by

    mysql 语句中如果没有使用 order by 来排序,通常会用 主键正序排列,但是有的时候不是这样,来看一个实例。...实例 ---- 群友问:请教一个问题,mysql 默认排序问题,当sql 语句 排序没有指定 主键(id)时候是按着什么规则排序呢? ?...讨论 ---- 来自网友回答: ? 大概意思就是数据储存表 不是有序,而是一个集合,在没有使用 order by 来排序时候,不能默认就是 根据主键排序。...大概意思:没有默认排序顺序。即使表具有聚集索引,也不能保证按该顺序获得结果。如果需要特定顺序,则必须使用ORDER BY子句。 ?...结论 ---- 到这大家应该明白了,mysql 没有默认排序,如果需要排序一定要加上 order by 来排序,大家有没有遇到过这样问题,欢迎一起来讨论,如果有不对地方,请指正,感谢。

    4.3K20

    MySQL 字符集与排序规则

    它代表着排序规则。...概念 MySQl排序规则(collation),一般指对字符集中字符串之间比较、排序制定规则, MySLQ排序规则特征: o 两个不同字符集不能有相同校对规则; o 每个字符集有一个默认校对规则...其实对于排序规则细节问题,我们关注较少,反而对排序规则中是否涉及大小写敏感关注较多。 例如,系统使用 utf8 字符集,若使用 utf8_bin 排序规则,执行 SQL 查询时区分大小写。...使用 utf8_general_ci 不区分大小写(默认 utf8 字符集对应校对规则是 utf8_general_ci)。...使用 对于一种语言仅当使用 utf8_unicode_ci 排序不好时,才执行与具体语言相关utf8字符集 校对规则

    2.4K20

    修改MySQL varchar类型字段排序规则

    记录一个在工作中遇到问题,也不算是问题,为是找一种简便方法批量修改数据表字段排序规则,在MySQL中叫collation,常常和编码CHARACTER一起出现。...level https://confluence.atlassian.com/display/CONFKB/How+to+Fix+the+Collation+and+Character+Set+of+a+MySQL...operation '=',主要是因为迁移数据库时候没有把collation规则及时修改过来。...网上搜到解决办法,都提到了修改数据表级别collation排序规则。...由于需要修改字段太多了,手工修改肯定是费时费力。自然也想到了用脚本方式批量修改,但是发现这种通过查找MySQL信息表、过滤、拼接生成批量修改语句太好用了,而且还能做到针对varchar类型。

    4.7K30

    MySQL原理 - 字符集与排序规则

    任何计算机存储数据,都需要字符集,因为计算机存储数据其实都是二进制编码,将一个个字符,映射到对应二进制编码这个映射就是字符编码(字符集)。这些字符如何排序呢?决定字符排序规则就是排序规则。...--------------------+-----+------------+-------------+---------+ 26 rows in set (0.11 sec) 每个字符集都有一个默认排序规则...,如果只修改了比较规则,字符集也会跟着变化,具体规则如下: 只修改字符集,则比较规则将变为修改后字符集默认比较规则。...表级别 可以在创建时指定字符集合排序规则,不指定的话,用数据库字符集还有排序规则,也可以修改字符集和排序规则。...列级别 可以在创建表时候,指定不同列有不同字符集和排序规则,也可以修改列字符集和排序规则mysql> create table test (name varchar(32) character

    3.1K10

    技术分享 | MySQL--测试--排序规则 collation

    字符集和排序规则默认选择:如果你仅指定字符集,⽽不指定排序规则,则排序规则为字符集默认排序规则;如果你仅指定排序规则,不指定字符集,则字符集为排序规则对应字符集;例外项⻅: "设置对象字符集和排序规则...查看字符集与其默认排序规则:SHOW CHARACTER SET ;或者select * from INFORMATION_SCHEMA.CHARACTER_SETS ;查看字符集包含排序规则:SHOW...:对象字符集排序规则说明 servercharacter_set_servercollation_server 如果create database时未带上字符集和排序规则,则使⽤server中声明作为默认值...,则使⽤数据库中声明作为默认值;如果load data时未带上character set⼦句,则使⽤character_set_database作为默认值;如果在创建routine时未带上字符集和排序规则...,则使⽤数据库中声明作为默认值;table建表时CHARACTER SET ⼦句;建表时COLLATE ⼦句;如果未在单个列上指定字符集和排序规则,则将表中声明作为默认值;column建表时字段定义上

    1.2K30

    MySQL排序规则导致无法命中索引问题

    对于前面表中每个行组合,MySQL 检查是否可以使用范围或索引合并访问方法来检索行。这不是很快,但比执行完全没有索引连接要快。...原因 在SQL关联条件中,关联字段类型相同,并不是隐式类型转换问题导致无法命中索引,那么我们开始排查两表字符集、排序规则是否一致。...user表设计: vehicle表设计: 两表字符集均为utf8mb4,不会出现因字符集不同导致隐式转换问题,那么对比排序规则发现两表排序规则是不同排序规则不一致时,MySQL同样会进行强制类型转换...解决方案 方案一:使用数据库管理工具或alter table语句修改排序规则。...方案二:将原表重命名备份, 修改原建表语句为正确排序规则,执行建表语句,而后使用select into语句将旧表数据恢复到新表。

    31430

    MySQL字符集大揭秘:排序规则决定你数据如何排序

    亲爱读者朋友们,欢迎来到MysSQL世界,我们将一同深入探讨MySQL字符集与排序规则,揭示它们差异与影响。...字符集和排序规则在数据库中选择不仅关系到数据存储和检索,还直接影响到数据正确性和查询效率。通过本文,你将更加深刻地理解MySQL字符集与排序规则之间关系,并掌握如何正确应用它们。...MySQL支持字符集和排序规则 MySQL支持多种字符集和排序规则,不同字符集和排序规则适用于不同语言、文化和应用场景。...性能需求:不同排序规则可能对查询性能产生影响。在高负载环境下,选择性能最佳排序规则可能是必要。 结论 字符集和排序规则MySQL中扮演着重要角色,它们影响着文本数据存储、比较和检索行为。...选择适当字符集和排序规则对于确保数据库数据正确性和查询性能至关重要。希望本文能帮助你更好地理解MySQL字符集与排序规则之间关系,并在实际应用中正确选择和配置它们,以满足你应用需求。

    1.3K20

    MySQL LEFT JOIN 默认值,数据过滤,排序处理

    MySQL LEFT JOIN 会读取左边数据表全部数据,即便右边表无对应数据,RIGHT JOIN 和 LEFT JOIN 方向相反,其他完全一样,主要理解 LEFT JOIN,RIGHT JOIN...我们直接将商品信息存储在 WordPress 默认 posts 表里面,当该商品分销比率不同于系统默认时候,我们会在 postmeta 表插入一条记录, meta_key 为 commission...null 上面 SQL 可以返回商品信息和他分销比率,但是没有单独设置分销比率商品返回结果是 null,能否使用默认分销比率代替 null 值呢?...排序 使用了默认值之后,我们就可以使用 commission 进行排序了: SELECT wp_posts.*, COALESCE(wp_postmeta.meta_value, 10) as commission...,相同商品,则使用发布时间进行排序

    1.5K10

    MySql自定义排序规则--Java学习网

    locate) FIELD函数 格式:field(value,str1,str2,str3,str4),value与str1、str2、str3、str4比较,返回1、2、3、4,如遇到null或者不在列表中数据则返回...1 6 id uname passwd 4 dd dd 5 ee ee 3 cc cc 2 bb bb 1 aa aa 6 ff ff INSTR(字段名, 字符串) 这个函数返回字符串在某一个字段内容中位置...locate( id, ’2,3,5,4′ ) DESC 结果显示顺序:4 5 3 2 1 6 4 dd dd 5 ee ee 3 cc cc 2 bb bb 1 aa aa 6 ff ff 如我想要查找数据库中...ID顺序首先是(2,3,5,4)然后在是其它ID顺序,你首先要把他降序排即(4 5 3 2),然后在SELECT * FROM user order by field(id,4,5,3,2) DESC...ORDER BY INSTR( ’4,5,3,2′, id ) DESC 或用 SELECT * FROM user ORDER BY locate( id, ’4,5,3,2′ ) DESC 就得到你想要结果了

    1.1K20

    ThinkPHP一些默认规则

    每个应用模块都有独立配置文件(位于模块目录Conf/config.php),定义格式默认采用PHP数组定义 2....默认找模版规则:View/控制器名/操作名.html;(操作和模版对应关系) 要输出视图,必须在控制器方法中进行模板渲染输出操作,模板输出最常用是使用display方法,$this->display...();表示系统会按照默认规则自动定位模板文件 • 如果当前没有启用模板主题则定位到:当前模块/默认视图目录/当前控制器/当前操作.html ; • 如果有启用模板主题则定位到:当前模块/默认视图目录/当前主题.../当前控制器/当前操作.html; • 如果有更改TMPL_FILE_DEPR设置(假设 'TMPL_FILE_DEPR'=>'_')的话,则上面的自动定位规则变成: 当前模块/默认视图目录/当前控制器...模版表达式:模块@主题/控制器/操作  默认都是在view文件夹下 14.

    80410

    排序规则引起冲突问题

    最近在工作中碰到一例因排序规则而导致冲突问题,运行环境是SQL 2008,具体代码如下: DECLARE @URL VARCHAR(500), @startdate DATETIME, @enddate...修改后批处理中语法检查时并没有发现任何错误。执行时出现  上述错误提示。从错误提示来分析是因为排序冲突所致,因此查看新增两个字段是否使用了相同排序规则。...Dim_UserId 1234819461 UserGUID 2 Latin1_General_BIN */ --从查询结果中可以看出,原来是因为两个列使用不同排序规则...3.投影表达式排序规则。 二、COLLATE 子句只能应用于 char、varchar、text、nchar、nvarchar 和 ntext 数据类型。...其它关于排序规则问题请参照本人其它文章:SQL server 排序规则(COLLATE) 更多参考:http://msdn.microsoft.com/zh-cn/library/ms184391.

    86520

    修改 WordPress 文章默认排序方法

    我们用 wordpress 发布文章时,会用到一个希望把指定某一篇或者几篇文章置顶首页功能,而不是 wordpress 默认按照发布时间降序排列,也就是说按照我想法文章排序第一、第二、第三、第四等等...虽然有些主题提供了置顶功能,但依然不能满足完全自定义文章排序需求,默认 wp 博客是不提供这项功能,也可以使用插件来实现。...本着能不用插件就不用插件原则,魏艾斯博客来说一下如何修改 wordpress 文章默认排序,摆脱按发布时间升降序排列方法。 ? 首先要添加一处。...这样就添加了一个自定义栏目,初始值是 0,这个 post_order 就是用来排序。 这种方法需要每篇文章都设置一下排序值,魏艾斯博客首页置顶文章排序就是这样设置出来。...在 index.php 中替换如下代码,把默认发布时间排序改成了你 meta_key,同时添加一项 meta_key。

    2.9K50

    写final域排序规则

    假设线程B读对象引用与读对象成员域之间没有重排序(首先说明重排序规则1),下图是一种可能执行时序: 图片.png   在上图中,写普通域操作被编译器重排序到了构造函数之外,读线程B错误读取了普通变量...而写final域操作,被写final域排序规则“限定”在了构造函数之内,读线程B正确读取了final变量赋值之后值。...读final域排序规则   初次读对象引用与初次读该对象包含final域,这两个操作之间存在间接依赖关系。由于编译器遵守间接依赖关系,因此编译器不会重排序这两个操作。...而读final域排序规则会把读对象final域操作“限定”在读对象引用之后,此时该final域已经被A线程初始化过了,这是一个正确读取操作。   ...读final域排序规则可以确保:在读一个对象final域之前,一定会先读包含这个final域对象引用。

    50600

    【C++】构造函数调用规则 ( 默认构造函数 | 默认无参构造函数 | 默认拷贝构造函数 | 构造函数调用规则说明 )

    一、默认构造函数 C++ 类中 2 种特殊构造函数 , 分别是 : 默认无参构造函数 : 如果 C++ 类中 没有定义构造函数 , C++ 编译器会自动为该类提供一个 " 默认无参构造函数 " ,...obj; // 调用默认无参构造函数 MyClass obj2 = obj; // 调用默认拷贝构造函数 二、构造函数调用规则 ---- 1、构造函数规则说明 构造函数调用规则 : 提供 默认无参构造函数...定义了 非拷贝构造函数 , 如 : 有参构造函数 / 无参构造函数 , C++ 编译器 不会提供 默认无参构造函数 , 但是 会提供 默认 拷贝构造函数 ; 默认 拷贝构造函数 只能进行 成员变量..., C++ 编译器不会自动生成 默认无参构造函数 和 默认拷贝构造函数 ; 使用 Student s; 代码 创建对象 , 报错 “Student”: 没有合适默认构造函数可用 ; 说明 C++...和 默认拷贝构造函数 ; 使用 Student s; 代码 创建对象 , 报错 “Student”: 没有合适默认构造函数可用 ; 说明 C++ 编译器没有为该类生成 默认无参构造函数 ; 代码示例

    1K30
    领券