이전에 mysql 테이블의 대소문자 구분에 대한 기사를 쓴 적이 있습니다. 실제로 mysql의 필드에 저장된 내용은 대소문자를 구분하지 않습니다. . 이 기사에는 간략한 요약이 제공됩니다.
검토할 내용:
Linux에서 데이터베이스 이름, 테이블 이름, 열 이름 및 별칭에 대한 MySQL의 대소문자 규칙은 다음과 같습니다.
1. 데이터베이스 이름과 테이블 이름은 대소문자를 엄격하게 구분합니다. 별칭은 엄격하게 대소문자를 구분합니다.
3. 열 이름과 열 별칭은 모든 경우에 대소문자를 구분합니다.
4. 기본적으로 필드 내용은 대소문자를 구분하지 않습니다.01 예
CREATE TABLE `tb_user` ( `id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` VARCHAR (50) NOT NULL COMMENT '用户名', PRIMARY KEY (`id`) ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '用户表'; INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('1', 'user'); INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('2', 'User'); INSERT INTO `u2s`.`tb_user` (`id`, `username`) VALUES ('3', 'USER');
사용자 이름이 모두 소문자 user
인 사용자를 쿼리하려면 쿼리 문을 사용하세요. 결과적으로 세 개의 레코드가 모두 쿼리되었습니다.
mysql> SELECT username from tb_user where username = 'user'; +----------+ | username | +----------+ | user | | User | | USER | +----------+ 3 rows in set
이 예시를 통해 간단히 설명하자면, 필드 내용은 기본적으로 대소문자를 구분하지 않습니다. user
的用户,结果查询出这个三条记录全部都查询到了。
mysql> select * from tb_user where BINARY username ='user'; +----+----------+ | id | username | +----+----------+ | 1 | user | +----+----------+ 1 row in set
通过这个例子简单说明,字段内容默认情况下是大小写不敏感的。
**因为默认情况下字段内容是不区分大小写的,也即大小写不敏感。**所以解决方案就是要新增字段内容的校验规则。
使用mysql 的BINARY
关键字使搜索区分大小写。
在查询的sql中加入BINARY
关键字
CREATE TABLE `tb_user1` ( `id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` VARCHAR (50) BINARY NOT NULL COMMENT '用户名', PRIMARY KEY (`id`) ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '用户表'; mysql> show create table tb_user1; tb_user1 | CREATE TABLE `tb_user1` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '用户名', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表' 1 row in set
这种方式相对较简单,不用改动表结构,只需在需要区分查询的字段前加上关键字。这种方式也是有缺点的,每次写查询的时候都要注意加关键字,并可能需要改动的代码较多。
在创建表的时候进行限制
CREATE TABLE `tb_user2` ( `id` BIGINT (20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` VARCHAR (50) NOT NULL COMMENT '用户名', `info` VARCHAR (100) NOT NULL COMMENT '详情描述', PRIMARY KEY (`id`) ) ENGINE = INNODB DEFAULT CHARSET = utf8 COLLATE=utf8_bin COMMENT = '用户表'; mysql> show create table tb_user2; tb_user2 | CREATE TABLE `tb_user2` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '用户名', `info` varchar(100) COLLATE utf8_bin NOT NULL COMMENT '详情描述', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户表'
或者 使用
rrreee使用 NGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
会将字段中varchar类型的全部设置区分大小写。这两种查看表的详情,本质上都是 在字段上 加上了 COLLATE utf8_bin
BINARY
키워드를 사용하여 대소문자를 구분하여 검색하세요.
쿼리 sql
rrreee
에BINARY
키워드를 추가하세요. 이 방법은 비교적 간단합니다. 테이블 구조를 변경할 필요가 없습니다. 필요한 필드 앞에 키워드만 추가하면 됩니다. 쿼리와 구별됩니다. 이 방법 역시 단점이 있습니다. 쿼리를 작성할 때마다 키워드 추가에 주의해야 하고, 변경해야 할 코드가 많을 수 있습니다.
테이블 생성 시 제한
rrreee
을 사용하거나rrreee
을 사용하세요.NGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
을 사용하면 필드의 varchar 유형에 대한 모든 설정이 대소문자를 구분합니다. 이 두 보기 테이블의 세부 사항은 본질적으로 필드에 COLLATE utf8_bin
을 추가하는 것입니다. 03 요약필드 값의 경우는 mysql의 대조 규칙에 의해 제어됩니다. 교정 규칙에 관해서는 문자 집합에 대해 이야기해야 합니다. 문자 집합은 기호 및 인코딩의 집합이고 대조 규칙은 문자 집합 내의 문자를 비교하기 위한 규칙 집합입니다. 일반적으로 대조 규칙은 일반적으로 언어 이름을 포함하여 연관된 문자 세트의 이름으로 시작하고 _ci(대소문자 구분 안 함), _cs(대소문자 구분) 또는 _bin(이진)으로 끝납니다. 예를 들어, 다음 표에 표시된 대로 utf8 문자 집합은 다음과 같습니다. 1) utf8_bin: utf8_bin은 문자열의 각 문자를 대소문자를 구분하는 이진 데이터로 저장합니다.
2) utf8_general_ci: utf8_genera_ci는 대소문자를 구분하지 않으며, ci는 대소문자를 구분하지 않는다는 뜻, 즉 대소문자를 구분하지 않는다는 뜻의 약어입니다. 🎜🎜3) utf8_general_cs: utf8_general_cs는 대소문자 구분, cs는 Case Sensitive의 약어, 즉 대소문자 구분입니다. 🎜🎜참고: 내 컴퓨터의 5.7 버전은 utf8_general_cs 문자 집합을 지원하지 않으며 생성 중에 오류가 보고되었습니다. 🎜🎜이전 글과 이번 글을 통해 다들 MySQL의 대소문자 구분에 대해 어느 정도 이해하셨을 겁니다. 실제 개발에서는 라이브러리와 테이블 이름에 소문자를 사용하는 것이 가장 좋습니다. 필드 대문자 사용 질문입니다. 그리고 일관성 없는 환경으로 인해 이상한 문제가 발생하는 것을 방지하기 위해 로컬 개발 환경의 mysql 구성을 서버의 mysql 구성과 일치하게 만듭니다. 🎜🎜개발 중에 이상한 문제에 직면하셨나요? 메시지를 남기고 공유하는 것을 환영합니다. 🎜🎜🎜더 많은 MySQL 관련 기술 기사를 보려면 🎜🎜🎜MySQL Tutorial🎜🎜🎜 칼럼을 방문하여 알아보세요! 🎜🎜위 내용은 MySQL에 저장된 필드는 대소문자를 구분하지 않습니다. 알고 계셨나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!