typora/daliy_note/8月归档/8.29/mysql.md

49 lines
1.7 KiB
Markdown
Raw Normal View History

2024-12-11 21:48:55 -05:00
### mysql where 条件大小写
在 MySQL 中,`WHERE` 条件的大小写敏感性取决于所使用的字符集和排序规则collation
### 1. 默认行为
- **大小写不敏感**在大多数情况下MySQL 的默认字符集 `latin1``utf8` 使用的排序规则(如 `latin1_swedish_ci``utf8_general_ci`)都是不区分大小写的。这意味着在这些排序规则下,`WHERE` 子句将不会区分大小写。例如:
```
SELECT * FROM users WHERE username = 'JohnDoe';
```
该查询将返回 `johnDoe`、`JOHNDOE` 和 `JohnDoe` 等所有变体。
### 2. 大小写敏感
- **使用大小写敏感的排序规则**:如果你想要 `WHERE` 条件区分大小写,可以使用大小写敏感的排序规则,例如 `latin1_bin``utf8_bin`。例如:
```
SELECT * FROM users WHERE BINARY username = 'JohnDoe';
```
使用 `BINARY` 关键字会强制 MySQL 将 `username` 列的值视为二进制字符串,从而实现大小写敏感的比较。
- **指定排序规则**:你也可以在查询中显式指定排序规则。例如:
```
SELECT * FROM users WHERE username COLLATE utf8_bin = 'JohnDoe';
```
### 3. 修改表字符集
- utf8_general_ci --不区分大小写
- utf8_bin区分大小写
```sql
ALTER TABLE temp_01 MODIFY COLUMN browser VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
Query OK, 180 rows affected (0.01 sec)
Records: 180 Duplicates: 0 Warnings: 0
```
### 4. 总结
- 默认情况下MySQL 的 `WHERE` 条件是大小写不敏感的,除非使用了二进制比较或指定了大小写敏感的排序规则。
- 如果想要进行大小写敏感的比较,可以使用 `BINARY` 关键字或者指定适当的排序规则。