1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-16 18:10:13 +08:00

[docs update]添加NULL 和 '' 的区别是什么?

This commit is contained in:
Guide 2023-07-20 23:11:57 +08:00
parent 0638f92afa
commit 1cca70a215
2 changed files with 12 additions and 1 deletions

View File

@ -155,6 +155,17 @@ Timestamp 只需要使用 4 个字节的存储空间,但是 DateTime 需要耗
关于两者的详细对比,请参考我写的[MySQL 时间类型数据存储建议](./some-thoughts-on-database-storage-time.md)。 关于两者的详细对比,请参考我写的[MySQL 时间类型数据存储建议](./some-thoughts-on-database-storage-time.md)。
### NULL 和 '' 的区别是什么?
`NULL``''`(空字符串)是两个完全不一样的值,区别如下:
- `NULL` 代表一个不确定的值,就算是两个 `NULL`,它俩也不一定相等。例如,`SELECT NULL=NULL`的结果为 false但是在我们使用`DISTINCT`,`GROUP BY`,`ORDER BY`时,`NULL`又被认为是相等的。
- `''`的长度是 0是不占用空间的`NULL` 是需要占用空间的。
- `NULL` 会影响聚合函数的结果。例如,`SUM``AVG``MIN``MAX` 等聚合函数会忽略 `NULL` 值。 `COUNT` 的处理方式取决于参数的类型。如果参数是 `*`(`COUNT(*)`),则会统计所有的记录数,包括 `NULL` 值;如果参数是某个字段名(`COUNT(列名)`),则会忽略 `NULL` 值,只统计非空值的个数。
- 查询 `NULL` 值时,必须使用 `IS NULL``IS NOT NULLl` 来判断,而不能使用 =、!=、 <、> 之类的比较运算符。而`''`是可以使用这些比较运算符的。
看了上面的介绍之后相信你对另外一个高频面试题“为什么MySQL不建议使用NULL作为列默认值”也有了答案。
## MySQL 基础架构 ## MySQL 基础架构
> 建议配合 [SQL 语句在 MySQL 中的执行过程](./how-sql-executed-in-mysql.md) 这篇文章来理解 MySQL 基础架构。另外,“一个 SQL 语句在 MySQL 中的执行流程”也是面试中比较常问的一个问题。 > 建议配合 [SQL 语句在 MySQL 中的执行过程](./how-sql-executed-in-mysql.md) 这篇文章来理解 MySQL 基础架构。另外,“一个 SQL 语句在 MySQL 中的执行流程”也是面试中比较常问的一个问题。

View File

@ -29,7 +29,7 @@ Java 集合框架如下图所示:
### 说说 List, Set, Queue, Map 四者的区别? ### 说说 List, Set, Queue, Map 四者的区别?
- `List`(对付顺序的好帮手): 存储的元素是有序的、可重复的。 - `List`(对付顺序的好帮手): 存储的元素是有序的、可重复的。
- `Set`(注重独一无二的性质): 存储的元素是无序的、不可重复的。 - `Set`(注重独一无二的性质): 存储的元素不可重复的。
- `Queue`(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。 - `Queue`(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。
- `Map`(用 key 来搜索的专家): 使用键值对key-value存储类似于数学上的函数 y=f(x)"x" 代表 key"y" 代表 valuekey 是无序的、不可重复的value 是无序的、可重复的,每个键最多映射到一个值。 - `Map`(用 key 来搜索的专家): 使用键值对key-value存储类似于数学上的函数 y=f(x)"x" 代表 key"y" 代表 valuekey 是无序的、不可重复的value 是无序的、可重复的,每个键最多映射到一个值。