mysql的collation区分大小写设置
mysql数据库在做查询时候,有时候是英文字母大小写敏感的,有时候又不是的,主要是由于mysql的字符校验规则的设置。通常默认是不支持的大小写字母敏感的,在主动设置mysql数据库的collation后,可以使得数据库满足大小写敏感,适合客户的一定要求。通过下面的试验进行理解学习.....
mysql> select version(); +-----------+ | version() | +-----------+ | 5.5.25 | +-----------+ 1 row in set (0.00 sec)
mysql> show variables like '%character%'; +--------------------------+------------------------------------------------------- | Variable_name | Value +--------------------------+------------------------------------------------------- | character_set_client | utf8 | character_set_connection | utf8 | character_set_database | latin1 | character_set_filesystem | binary | character_set_results | utf8 | character_set_server | latin1 | character_set_system | utf8 | character_sets_dir | D:\database\mysql\mysql-5.5.25-winx64\share\charsets\
mysql> show variables like '%collation%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8_general_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 3 rows in set (0.00 sec)
默认即为:collation_connection = utf8_general_ci 大小写不敏感校验规则;
mysql> show collation like '%utf8%'; +--------------------------+---------+-----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +--------------------------+---------+-----+---------+----------+---------+ | utf8_general_ci | utf8 | 33 | Yes | Yes | 1 | | utf8_bin | utf8 | 83 | | Yes | 1 | | utf8_unicode_ci | utf8 | 192 | | Yes | 8 | | utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
客户端字符集:utf8, 校验规则: utf8_general_ci, 默认为yes,即不是大小写敏感的匹配;
而utf8_bin是区分大小写的校验规则;
创建表做测试,看数据效果:
mysql> create table T_collation(first varchar(30) character set utf8 -> collate utf8_bin,second varchar(30) character set utf8 collate -> utf8_general_ci); Query OK, 0 rows affected (0.32 sec) mysql> show create table t_collation\G; *************************** 1. row *************************** Table: t_collation Create Table: CREATE TABLE `t_collation` ( `first` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `second` varchar(30) CHARACTER SET utf8 DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 1 row in set (0.00 sec) ERROR: No query specified mysql> insert into t_collation values('M','M'),('N','N'),('a','a'),('b','b'); Query OK, 4 rows affected (0.13 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> select * from t_collation; +-------+--------+ | first | second | +-------+--------+ | M | M | | N | N | | a | a | | b | b | +-------+--------+ 4 rows in set (0.00 sec)
比较查询结果:
mysql> insert into t_collation values('m','m'),('n','n'); Query OK, 2 rows affected (0.10 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from t_collation; +-------+--------+ | first | second | +-------+--------+ | M | M | | N | N | | a | a | | b | b | | m | m | | n | n | +-------+--------+ 6 rows in set (0.00 sec) mysql> select * from t_collation where first='m'; +-------+--------+ | first | second | +-------+--------+ | m | m | +-------+--------+ 1 row in set (0.02 sec) mysql> select * from t_collation where second='m'; +-------+--------+ | first | second | +-------+--------+ | M | M | | m | m | +-------+--------+ 2 rows in set (0.00 sec) mysql> select * from t_collation where second='M'; +-------+--------+ | first | second | +-------+--------+ | M | M | | m | m | +-------+--------+ 2 rows in set (0.00 sec) mysql> select * from t_collation where first='M'; +-------+--------+ | first | second | +-------+--------+ | M | M | +-------+--------+ 1 row in set (0.00 sec)
比较各自的校验规则,utf8_bin是区分大小写的,而utf8_general_ci是不区分的,默认的。
还可以从排序语句中进行比较,看看测试效果的.....
mysql> select * from t_collation; +-------+--------+ | first | second | +-------+--------+ | M | M | | N | N | | a | a | | b | b | | m | m | | n | n | +-------+--------+ 6 rows in set (0.00 sec) mysql> select * from t_collation order by first; +-------+--------+ | first | second | +-------+--------+ | M | M | | N | N | | a | a | | b | b | | m | m | | n | n | +-------+--------+ 6 rows in set (0.00 sec) mysql> select * from t_collation order by second; +-------+--------+ | first | second | +-------+--------+ | a | a | | b | b | | M | M | | m | m | | N | N | | n | n | +-------+--------+ 6 rows in set (0.00 sec)
同样符合校验规则的检查。
结论: 在MYSQL数据库中,根据实际业务需要,适当可以调整字符集的(collation)校验规则,修改默认的大小写敏感问题,满足实际需要,这本身就是数据库的一种设置,熟悉标准、规则,适当利用为项目所用,可以针对具体的数据库或者表或者表的列进行设置。
相关推荐
通过对SQL Server和MySQL中区分大小写的设置进行深入了解,我们可以更好地根据实际需求调整数据库的行为。无论是创建表时指定字段属性、查询时动态控制还是更改现有表的设置,这些方法都为我们提供了灵活的手段来...
在MySQL中,查询默认情况下通常是不区分大小写的,但如果你想让你的查询对大小写敏感,有几种方法可以实现。以下是一些关键知识点和步骤来帮助你在MySQL中进行区分大小写的查询。 1. **设置列的Collation** - **...
在MySQL数据库中,查询操作默认情况下是不区分大小写的,这意味着如果你在查询条件中使用了不同的大小写字母,比如"aaa"和"Aaa",它们会被视为相同,从而可能导致你期望的精确匹配失败。这对于一些特定场景,比如...
MySQL默认的行为是不区分字符串中的字母大小写,这可能会在某些场景下引起困扰,比如在需要严格区分大小写的数据库操作中。以下是对这一主题的详细解释。 首先,字符集是用于表示和存储文本数据的编码方式,如UTF-8...
在MySQL中,对于Column Collate其约定的命名方法如下: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *_ci: case insensitive collation,...
在MySQL数据库中,查询操作默认情况下是不区分大小写的,这意味着如果你在查询时输入的字符串与数据库中的数据在大小写上不完全匹配,查询仍然可能返回结果。这在某些场景下可能会导致意料之外的问题,比如在用户...
在MySQL数据库中,查询字符串时是否区分大小写是由字符集(character set)和校对规则(collation)共同决定的。当创建表或字段时,如果没有明确指定校对规则,MySQL通常会选择一个默认的,这可能导致在进行字符串...
MySQL的Collation命名规则通常以字符集名称开头,然后跟随一个语言名,最后以`_ci`(大小写不敏感)、`_cs`(大小写敏感)或`_bin`(二进制)结尾。例如,`latin1_bin`是基于`latin1`字符集的二进制校对规则,对于每...
3. **SQL语句中的大小写**:在编写SQL语句时,虽然数据库系统可能不区分大小写,但推荐始终使用大写关键字(如`SELECT`, `FROM`, `WHERE`等),而将表名和列名设置为小写或统一的命名约定,以提高代码的可读性。...
MySQL中的比对方法通常基于字符集,如'utf8_general_ci','ci'代表'Case Insensitive',表示不区分大小写;而'utf8_bin'则区分大小写并更关注字节级别的比较。 在SQL语句中,我们可以通过创建数据库、表或者列时...
- 适当选择排序规则,如`_bin`用于区分大小写,`_ci`用于不区分大小写。 了解和正确设置MySQL字符集是确保数据正确存储和检索的关键,对于处理全球化数据的应用尤其重要。通过合理配置,我们可以避免乱码问题,...
`utf8_general_ci`是排序规则(Collation),表示不区分大小写且基于通用规则的比较。 3. **创建表**: 在已设定字符集的数据库中创建表时,同样需要指定中文支持的字符集: ``` CREATE TABLE mytable ( id ...
lower_case_table_names=1 # Windows上设置为1,表示不区分大小写 collation-server=utf8_general_ci # 设置服务器的字符集和排序规则 character-set-server=utf8 # 设置服务器的字符集 ``` 三、端口设置 默认...
这里的`default-character-set`定义了MySQL的默认字符集,`character-set-server`设置了服务器级别的字符集,而`collation-server`则指定了排序规则,`utf8_general_ci`是一种不区分大小写的排序规则,适用于大多数...
不正确的字符序设置可能影响到数据的排序和比较逻辑,比如在区分大小写敏感的场景下使用了不区分大小写的字符序。 总之,MySQL的字符集和字符序是数据存储和检索的基础,它们对数据的表示、比较和排序有着直接的...