Mysql如何使得字段内容不区分大小写

本篇内容介绍了“MySQL如何使得字段内容不区分大小写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

成都创新互联成立十年来,这条路我们正越走越好,积累了技术与客户资源,形成了良好的口碑。为客户提供成都网站设计、成都做网站、网站策划、网页设计、申请域名、网络营销、VI设计、网站改版、漏洞修补等服务。网站是否美观、功能强大、用户体验好、性价比高、打开快等等,这些对于网站建设都非常重要,成都创新互联通过对建站技术性的掌握、对创意设计的研究为客户提供一站式互联网解决方案,携手广大客户,共同发展进步。

造成存储的时候按大小写存储,但是检索的时候不区分大小写. 这个也是在Oracle的默认情况不一致的,oracle 统一使用区分大小写的编码方式。所以在默认情况和oracle数据库是有区别的。
1. 插入 'Ab', 'ab'两条记录
root@test 09:11:51>insert into test values(3, 'Ab');
Query OK, 1 row affected (0.01 sec)


root@test 09:12:15>insert into test values(3,'ab');
Query OK, 1 row affected (0.01 sec)


root@test 09:12:39>select * from test;
+------+------+
| id   | name |
+------+------+
|    1 | aa11 |
|    2 | 1234 |
|    3 | Ab   |
|    3 | ab   |
+------+------+
4 rows in set (0.00 sec)
2. 按 'ab'检索返回两条记录,如果是Oracle则只会返回一条数据。
root@test 09:12:43>select * from test where name='ab';
+------+------+
| id   | name |
+------+------+
|    3 | Ab   |
|    3 | ab   |
+------+------+
2 rows in set (0.00 sec)


3. 查看gbk的当前编码格式COLLATION是gbk_chinese_ci, 即大小写不敏感, 存储的二进制编码都是一样的,
 所以在where子句中传入'ab', 'aB',都会事先翻译成相同的编码,所以返回两条记录。
root@information_schema 10:13:57>select * from tables where table_schema='test' and table_name='TEST' \G
*************************** 1. row ***************************
  TABLE_CATALOG: def
   TABLE_SCHEMA: test
     TABLE_NAME: test
     TABLE_TYPE: BASE TABLE
         ENGINE: InnoDB
        VERSION: 10
     ROW_FORMAT: Compact
     TABLE_ROWS: 5
 AVG_ROW_LENGTH: 3276
    DATA_LENGTH: 16384
MAX_DATA_LENGTH: 0
   INDEX_LENGTH: 0
      DATA_FREE: 0
 AUTO_INCREMENT: NULL
    CREATE_TIME: 2016-08-18 11:14:42
    UPDATE_TIME: NULL
     CHECK_TIME: NULL
TABLE_COLLATION: gbk_chinese_ci
       CHECKSUM: NULL
 CREATE_OPTIONS:
  TABLE_COMMENT:


--证明都是按小写来存储的。
root@information_schema 10:23:02>select ascii(name), id from test.test;
+-------------+------+
| ascii(name) | id   |
+-------------+------+
|          97 |    1 |
|          49 |    2 |
|          65 |    3 |
|          97 |    3 |
|          49 |   12 |
+-------------+------+


4. 如何设置好数据库,使得能够对于字段值区分大小写: 要把编码模式设置为非缺省值的COLLATE=gbk_bin
root@test 01:34:58>create table a(name varchar(10) ) ENGINE=InnoDB DEFAULT CHARSET=gbk COLLATE=gbk_bin;
Query OK, 0 rows affected (0.01 sec)


root@test 01:35:06>insert into a values('a');
Query OK, 1 row affected (0.00 sec)


root@test 01:35:16>insert into a values('A');
Query OK, 1 row affected (0.00 sec)


root@test 01:35:20>select * from a where name='a';
+------+
| name |
+------+
| a    |
+------+
1 row in set (0.00 sec)


root@test 01:35:30>select * from a where name='A';
+------+
| name |
+------+
| A    |
+------+
1 row in set (0.00 sec)


root@test 01:35:35>create table b (name varchar(10));
Query OK, 0 rows affected (0.00 sec)

备注: 
utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。

utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。

utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。

“Mysql如何使得字段内容不区分大小写”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


网页题目:Mysql如何使得字段内容不区分大小写
标题路径:http://ybzwz.com/article/gsijji.html