49 lines
1.7 KiB
Markdown
49 lines
1.7 KiB
Markdown
|
### 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` 关键字或者指定适当的排序规则。
|