Mysql怎样使得字段内容不区分大小写
发布时间:2022-01-19 13:44:25 所属栏目:MySql教程 来源:互联网
导读:本篇内容介绍了Mysql如何使得字段内容不区分大小写的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 造成存储的时候按大小写存储,但是检索的时候不
本篇内容介绍了“Mysql如何使得字段内容不区分大小写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 造成存储的时候按大小写存储,但是检索的时候不区分大小写. 这个也是在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如何使得字段内容不区分大小写”的内容就介绍到这里了,感谢大家的阅读。 (编辑:随州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |