《MYSQL数据库MySQL中查询的有关英文字母大小写问题的分析》要点:

本文介绍了MYSQL数据库MySQL中查询的有关英文字母大小写问题的分析,希望对您有用。如果有疑问,可以联系我们。

MYSQL必读mysql数据库在做查询时候,有时候是英文字母大小写敏感的,有时候又不是的,主要是由mysql的字符校验规则的设置决定的,通常默认是不支持的大小写字母敏感的.

MYSQL必读1. 什么是字符集和校验规则?

MYSQL必读字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则.任何一个给定的字符集至少有一个校对规则,它可能有几个校对规则.要想列出一个字符集的校对规则,使用SHOW COLLATION语句.

MYSQL必读

MYSQL必读校对规则一般有这些特征:

MYSQL必读    两个不同的字符集不能有相同的校对规则.

每个字符集有一个默认校对规则.例如,utf8默认校对规则是utf8_general_ci.

存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束.

MYSQL必读2. 不同级别的字符集和校验规则可控制大小写敏感

MYSQL必读MySQL5.1在同一台服务器、同一个数据库或甚至在同一个表中使用不同字符集或校对规则来混合定义字符串.字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级.

MYSQL必读2.1服务器级

MYSQL必读MySQL按照如下方法确定服务器字符集和服务器校对规则:

MYSQL必读(1)修改配置文件/etc/my.cnf

MYSQL必读在[mysqld]下添加:collation_server = utf8_bin

MYSQL必读重启实例

MYSQL必读

MYSQL必读更改服务器级的校验规则(collation_server )后,数据库校验规则(collation_collation)默认会继承服务器级的.

MYSQL必读注意:

MYSQL必读这个只适用于在重新启动之后,新建的库,已存在的库不受影响.

MYSQL必读同样的,即使库的校验规则改了,已经存在的表不受修改影响;

MYSQL必读同理与已经存在的列...

MYSQL必读

mysql> create database yutest0;

Query OK,1 row affected (0.00 sec)

mysql> use yutest0;

Database changed

mysql> create table t1 (name varchar(10));

Query OK,0 rows affected (0.01 sec)

mysql> insert into t1 values('AAA');

Query OK,1 row affected (0.00 sec)

mysql> insert into t1 values('aaa');

Query OK,1 row affected (0.01 sec)

mysql> select * from t1;

+------+

| name |

+------+

| AAA |

| aaa |

+------+

2 rows in set (0.00 sec)

mysql> select * from t1 where name='aaa';

+------+

| name |

+------+

| aaa |

+------+

1 row in set (0.00 sec)

MYSQL必读可以看出,在服务器级进行相应的校对规则设置,查询大小写敏感.

MYSQL必读(2)当服务器启动时根据有效的选项设置

MYSQL必读当启动mysqld时,根据使用的初始选项设置来确定服务器字符集和校对规则.

MYSQL必读shell> mysqld --character-set-server=latin1 --collation-server=latin1_swedish_ci

MYSQL必读2.2数据库级

MYSQL必读MySQL这样选择数据库字符集和数据库校对规则:

MYSQL必读    如果指定了character set X和collate Y,那么采用字符集X和校对规则Y.

如果指定了character set X而没有指定collate Y,那么采用character set X和character set X的默认校对规则.

否则,采用服务器字符集和服务器校对规则.

MYSQL必读(1)修改配置文件/etc/my.cnf

MYSQL必读进行了两组测试:

MYSQL必读1) 在[mysqld]下添加:

MYSQL必读

collation_server = utf8_bin

collation_database = utf8_bin

MYSQL必读2) 在[mysqld]下添加:

MYSQL必读

collation_database = utf8_bin

MYSQL必读重启实例,两组都不能正常启动,错误信息如下:

MYSQL必读

MYSQL必读可见,my.cnf配置文件中不支持设置collation_database 变量.

MYSQL必读(2)创建数据库时设置数据库校验规则

MYSQL必读

mysql> create database yutest default character set utf8 collate utf8_bin;

Query OK,1 row affected (0.00 sec)

mysql> show variables like 'collation_%';

+----------------------+-----------------+

| Variable_name | Value |

+----------------------+-----------------+

| collation_connection | utf8_general_ci |

| collation_database | utf8_bin |

| collation_server | utf8_general_ci |

+----------------------+-----------------+

3 rows in set (0.00 sec)

mysql> select * from t1;

+------+

| name |

+------+

| ABC |

| abc |

+------+

2 rows in set (0.00 sec)

mysql> select * from t1 where name='abc';

+------+

| name |

+------+

| abc |

+------+

1 row in set (0.01 sec)

MYSQL必读可以看出,在数据库级进行相应的校对规则设置,查询大小写敏感.

MYSQL必读2.3表级

MYSQL必读MySQL按照下面的方式选择表字符集和校对规则:

MYSQL必读    如果指定了character set X和collate Y,那么采用character set X和collate Y.

如果指定了character set X而没有指定collate Y,采用数据库字符集和服务器校对规则.

MYSQL必读在创建表时设置表级校验规则:

MYSQL必读

mysql> create database yutest2;

Query OK,1 row affected (0.01 sec)

mysql> use yutest2;

Database changed

mysql> create table t1(name varchar(10))

-> default character set utf8 collate utf8_bin;

Query OK,0 rows affected (0.01 sec)

mysql> insert into t1 values('ABC');

Query OK,1 row affected (0.00 sec)

mysql> insert into t1 values('abc');

Query OK,1 row affected (0.00 sec)

mysql> show variables like 'collation_%';

+----------------------+-----------------+

| Variable_name | Value |

+----------------------+-----------------+

| collation_connection | utf8_general_ci |

| collation_database | utf8_general_ci |

| collation_server | utf8_general_ci |

+----------------------+-----------------+

3 rows in set (0.00 sec)

mysql> select * from t1;

+------+

| name |

+------+

| ABC |

| abc |

+------+

2 rows in set (0.00 sec)

mysql> select * from t1 where name='abc';

+------+

| name |

+------+

| abc |

+------+

1 row in set (0.00 sec)

MYSQL必读可以看出,在表级进行相应的校对规则设置,查询大小写敏感.

MYSQL必读2.4 连接级

MYSQL必读考虑什么是一个“连接”:它是连接服务器时所作的事情.客户端发送SQL语句,例如查询,通过连接发送到服务器.服务器通过连接发送响应给客户端,例如结果集.对于客户端连接,这样会导致一些关于连接的字符集和校对规则的问题,这些问题均能够通过系统变量来解决:

MYSQL必读

mysql> show variables like 'character%';

+--------------------------+----------------------------+

| Variable_name | Value |

+--------------------------+----------------------------+

| character_set_client | utf8 |

| character_set_connection | utf8 |

| character_set_database | utf8 |

| character_set_filesystem | binary |

| character_set_results | utf8 |

| character_set_server | utf8 |

| character_set_system | utf8 |

| character_sets_dir | /usr/share/mysql/charsets/ |

+--------------------------+----------------------------+

8 rows in set (0.00 sec)

MYSQL必读    当查询离开客户端后,在查询中使用哪种字符集?

MYSQL必读服务器使用character_set_client变量作为客户端发送的查询中使用的字符集.

MYSQL必读    服务器接收到查询后应该转换为哪种字符集?

MYSQL必读转换时,服务器使用character_set_connection和collation_connection系统变量.它将客户端发送的查询从character_set_client系统变量转换到character_set_connection.

MYSQL必读    服务器发送结果集或返回错误信息到客户端之前应该转换为哪种字符集?

MYSQL必读character_set_results变量指示服务器返回查询结果到客户端使用的字符集.包括结果数据,例如列值和结果元数据(如列名).

MYSQL必读3. 创建数据库表时大小写不敏感,仍然有方法在查询时区分大小写

MYSQL必读3.1 在SQL语句中使用collate

MYSQL必读使用collate子句,能够为一个比较覆盖任何默认校对规则.collate可以用于多种SQL语句中,比如where,having,group by,order by,as,聚合函数.

MYSQL必读

mysql> select * from t1 where name collate utf8_bin = 'ABC';

+------+

| name |

+------+

| ABC |

+------+

1 row in set (0.00 sec)

mysql> select * from t1 where name = 'ABC';

+------+

| name |

+------+

| ABC |

| Abc |

| abc |

+------+

3 rows in set (0.00 sec)

mysql> select * from t1;

+------+

| name |

+------+

| ABC |

| Abc |

| abc |

+------+

3 rows in set (0.00 sec)

MYSQL必读3.2 binary操作符

MYSQL必读binary操作符是collate子句的一个速记符.binary 'x'等价与'x' collate y,这里y是字符集'x'二元校对规则的名字.每一个字符集有一个二元校对规则.例如,latin1字符集的二元校对规则是latin1_bin,因此,如果列a是字符集latin1,以下两个语句有相同效果:

MYSQL必读

select * from t1 order by binary a;

select * from t1 order by a collate latin1_bin;

mysql> select * from t1 where binary name = 'ABC';

+------+

| name |

+------+

| ABC |

+------+

1 row in set (0.00 sec)

mysql>

mysql> select * from t1 where name = 'ABC';

+------+

| name |

+------+

| ABC |

| Abc |

| abc |

+------+

3 rows in set (0.00 sec)

编程之家PHP培训学院每天发布《MYSQL数据库MySQL中查询的有关英文字母大小写问题的分析》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

mysql 查找小写字母_MYSQL数据库MySQL中查询的有关英文字母大小写问题的分析相关推荐

  1. mysql的英文字母_MySQL中查询的有关英文字母大小写问题的分析

    mysql数据库在做查询时候,有时候是英文字母大小写敏感的,有时候又不是的,主要是由mysql的字符校验规则的设置决定的,通常默认是不支持的大小写字母敏感的. 1. 什么是字符集和校验规则? 字符集是 ...

  2. mysql 查找数据过程_mysql数据库查询过程探究和优化建议

    查询过程探究 我们先看一下向mysql发送一个查询请求时,mysql做了什么? 如上图所示,查询执行的过程大概可分为6个步骤: 客户端向MySQL服务器发送一条查询请求 服务器首先检查查询缓存,如果命 ...

  3. mysql select详解_MySQL数据库 select 数据查询详解

    数据查询 数据查询是数据库系统应用的主要内容,也是用户对数据库最频繁.最常见的基本操作请求.数据查询可以根据用户提供的限定条件,从已存在的数据表中检索用户需要的数据.MySQL使用SELECT语句从数 ...

  4. mysql 查找字符位置_MySQL数据库中如何查看一个字符串在另一个字符串中第一次出现的位置呢?...

    摘要: 下文讲述MySQL数据库中查看一个字符串第一次出现的位置的方法分享,如下所示: 实现思路: 方式1: 使用系统函数LOCATE(substr,str)即可获取 substr字符串在str中第一 ...

  5. word中如何插入abcd英文字母的页码 页码word中怎么做插入abcd英文字母的 oldtimeblog

    word中如何插入abcd英文字母的页码 页码word中怎么做插入abcd英文字母的页码 word中插入页码的时候,默认是插入的123数字页码,想要插入abcd英文字母页码,该怎么插入呢?下面我们就来 ...

  6. 从键盘输入一行英文字符串,只统计字符串中出现的每个英文字母的个数。

    不要原版抄袭,可查看逻辑.题目非原创... 问题描述: 从键盘输入一行英文字符串,只统计字符串中出现的每个英文字母的个数.大小写字母算相同的字符,不做区分,例如a和A,算相同字符. [输入形式] 输入 ...

  7. java用正则表达式判断字符串中是否仅包含英文字母、数字和汉字_灵思致远Leansmall的博客-CSDN博客_java判断字符串只包含数字字母

    import java.util.regex.Matcher; import java.util.regex.Pattern;public class StrValidate {// 纯数字priva ...

  8. 判断字符串中是否仅包含英文字母、数字和汉字

    /*** 判断字符串中是否仅包含英文字母.数字和汉字* @param str* @return*/public static boolean isLetterDigitOrChinese(String ...

  9. (java)从键盘输入一行英文字符串,只统计字符串中出现的每个英文字母的个数。大小写字母算相同的字符,不做区分,例如a和A,算相同字符。

    问题描述] 从键盘输入一行英文字符串,只统计字符串中出现的每个英文字母的个数.大小写字母算相同的字符,不做区分,例如a和A,算相同字符. [输入形式] 输入一行英文字符串. [输出形式] 以合适的形式 ...

最新文章

  1. VBA中级班课时3小结
  2. 国内外有哪些漏洞信息发布平台?
  3. 手把手教你走进Hyperledger Fabric
  4. Linux 基础 - 磁盘管理 -06
  5. SQL Server-游标使用
  6. QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connect
  7. canny算子的运用
  8. getpeername函数与getsockname函数的介绍
  9. Flutter:实现红包晃动效果
  10. 开源项目SlidingMenu的使用(Android)
  11. android view销毁回调,Android View 常用的回调方法
  12. 网络交换机的分类介绍
  13. mysql 查看锁_别吵吵,分布式锁也是锁
  14. Kerberos KDC not reachable
  15. Audio Jungle宣传专题片头音乐AE模板专用配乐合集-永久更新
  16. 光盘安装计算机系统安装教程,光盘重装系统|电脑光盘一键重装系统教程
  17. ES06# Filebeat采集原理与监控指标梳理
  18. Python 画沿着高对称性的能带图
  19. 如何制作和发布网页(上)
  20. c++栈的学习( 括号匹配问题)

热门文章

  1. 易基因 | 文献解读:单细胞RRBS+RNA测序揭示黄曲霉毒素B1诱导S期阻滞L02细胞肝毒性新机制
  2. Tomcat 2022-7-27
  3. ie8 ajax拒绝访问的解决办法
  4. 卉原中学2021年高考成绩查询,卉原中学2021年宿舍条件
  5. 机器学习中级教程 7.数据泄漏
  6. DHL供应链将再投资2.18亿欧元加码中国市场
  7. [转] PID算法的解析()
  8. pymssql连接sql server报错:pymssql._pymssql.OperationalError
  9. 康耐视visionpro工具大全
  10. C---calloc