MySQL一些默认规则

MySQL的默认规则

MySQL插入数据,需要加引号的数据类型

在平日使用的时候并没有注意到MySQL插入数据的时候字段对应的数据到底需不需要加上单引号。有些字段必须是要加上单引号的,否则会报错。但是有些确实加不加都无所谓。这有点意思。
见下图:
在这里插入图片描述
教师表teacher中tno为长度为3的字符型,在插入时加不加单引号都可以插入,甚至查询时where tno='111’和where tno=111都可以查询出相同结果。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
通过查询,得知以下类型是需要加上单引号的:

  • 字符串类型和日期类型需要加单引号
  • 整数和浮点型的不需要加

MySQL加单引号和不加单引号的性能比较

还是刚才的teacher表,又存在一个新的问题,查询时where tno='111’和where tno=111都可以查询出相同结果。那他们有什么性能上的差距吗?详细可见
在这里插入图片描述
上面结果显示,都可以查询出结果,但是通过explain可以查看出2个SQL语句的不同。效率上的不同。
在这里插入图片描述

  • 第一个是没加单引号,是全扫描,未使用到主键索引;
  • 第二个加上单引号,使用了索引,效率高;

总结:我们在写SQL查询的时候,对应字符类型就还是的加上单引号吧,似乎那没有坏处。在mysql中单引号是代表字符不需要再编辑了,如果不是字符还需要mysql进行一个类型判断操作所以自然就慢了。

<think>好的,我需要回答用户关于MySQL默认排序规则的问题。首先,用户提到他们想了解MySQL的默认排序规则是什么,所以我需要明确解释这个概念,并确保回答结构清晰,符合用户的要求。首先,我应该从排序规则的基本定义开始。排序规则(collation)决定了字符串比较和排序的规则,比如是否区分大小写、重音符号等。接着,需要说明MySQL中默认的排序规则是如何设定的,这通常与字符集(charset)相关联。每个字符集都有一个默认的排序规则,例如utf8mb4的默认排序规则是utf8mb4_general_ci。这里需要确认具体的字符集对应的默认排序规则,可能需要查阅MySQL文档来确保准确性。然后,用户提供的引用中提到了不同排序规则下的例子,比如使用utf8_unicode_ci时'à'和'a'被视为相等,而使用latin1_general_cs时则不等。这说明排序规则会影响比较结果,这也需要在回答中举例说明,帮助用户理解不同排序规则的实际影响。接下来,用户还提到了默认排序的问题,特别是在没有明确指定ORDER BY时的行为。根据引用[2],MySQL的默认排序不能依赖,因为如果没有ORDERBY子句,结果的顺序可能不稳定,可能会受数据存储方式或索引的影响。这部分需要强调在查询中显式使用ORDER BY的重要性,避免依赖默认排序,同时解释GROUPBY可能隐式排序的情况,但MySQL8.0之后可能有所变化,需要确认版本差异。 此外,用户可能想知道如何查看和修改默认的排序规则。例如,查看数据库或表的排序规则可以使用SHOWCREATE DATABASE或SHOWTABLESTATUS,而修改则可以在创建时指定CHARACTER SET和COLLATE。这部分需要提供具体的SQL语句示例,帮助用户操作。最后,生成的相关问题需要围绕用户可能进一步关心的点,比如如何修改默认排序规则、排序规则对查询的影响、不同字符集的默认规则比较,以及默认排序是否可靠等。这些问题应覆盖用户可能遇到的实际应用场景,帮助他们深入理解和解决问题。 在回答过程中,需要确保所有数学表达式和代码块符合格式要求,行内公式用$...$,独立公式用$$...$$。同时,引用用户提供的引用内容,并在适当的位置添加引用标识,例如在讨论排序规则示例时引用[^1],在讨论默认排序不可靠时引用[^2]。总结回答结构:先解释排序规则的概念,再说明MySQL中默认排序规则的设定方式,举例不同规则的影响,讨论默认排序的不确定性,最后给出查看和修改的方法,并生成相关问题。需要确保语言简洁,信息准确,引用恰当。</think>### MySQL默认排序规则详解 #### 一、排序规则的定义 排序规则(Collation)是字符集中用于**定义字符比较、排序和大小写敏感性的规则**。例如,`utf8mb4_general_ci`表示UTF8字符集下的通用排序规则,`ci`表示不区分大小写(Case Insensitive)。 #### 二、MySQL的默认排序规则 1. **字符集与排序规则的关系** 每个字符集有一个默认排序规则。例如: - `utf8mb4`默认使用`utf8mb4_general_ci`[^1] - `latin1`默认使用`latin1_swedish_ci` ```sql -- 查看字符集的默认排序规则 SHOW CHARACTER SET LIKE 'utf8mb4'; ``` 2. **默认排序规则的影响** - 不指定排序规则时,MySQL会根据字符集选择默认规则。 - 示例:`utf8mb4_general_ci`会将`'a'`和`'À'`视为相等[^1]: ```sql SELECT 'à' = 'a'; -- 返回1(相等) ``` #### 三、默认排序行为的不可靠性 - **未指定`ORDER BY`时**,查询结果的顺序可能因存储引擎、索引或数据分布而变化[^2]。 - **`GROUP BY`的隐式排序**: 在MySQL 8.0之前,`GROUP BY`会按分组字段隐式排序,但可通过`ORDER BY NULL`禁用: ```sql SELECT department FROM employees GROUP BY department ORDER BY NULL; ``` #### 四、查看与修改默认排序规则 1. **查看当前设置** ```sql -- 查看数据库默认排序规则 SHOW CREATE DATABASE mydb; -- 查看表排序规则 SHOW TABLE STATUS LIKE 'mytable'; ``` 2. **修改默认排序规则** - 创建数据库时指定: ```sql CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` - 修改表排序规则: ```sql ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` #### 五、关键注意事项 - **显式指定排序规则**:在比较字符串时,可通过`COLLATE`强制指定规则: ```sql SELECT 'a' = 'A' COLLATE utf8mb4_general_ci; -- 返回1 SELECT 'a' = 'A' COLLATE utf8mb4_bin; -- 返回0 ``` - **索引与性能**:排序规则影响索引的匹配方式,区分大小写的规则(如`_bin`)可能需要更多存储和计算资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值