首页
学习
活动
专区
工具
TVP
发布

数据库的大小写敏感问题

在数据库的使用过程中,经常会遇到各种各样的问题,查找问题原因也是几经周折,煞费苦心,结果哭笑不得。一个小的问题可能导致很大的麻烦,所以想要做到事半功倍,对数据库的了解以及在做数据库设计的时候就应该考虑很多问题,例如本文将要阐述的大小写问题。不同的数据库默认的大小写敏感设置不尽相同,并且可以通过多种方式进行设置。

内容提要

MySQL的大小写设置

SQL Server的大小写设置

Oracle的大小写设置

MySQL的大小写设置

MySQL目前最常用的编码格式UTF8有三种格式:

1. uft8_general_ci,MySQL默认格式,ci为case insensitive的缩写,即大小写不敏感。

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

3. utf8_general_cs,cs为case sensitive的缩写,即大小写敏感。

MySQL设置大小写的方式有多种,可以通过设置数据库级别控制,表级别控制或者字段级别设置。

说到大小写,大家经常想到数据库名与表名、字段名最好不区分大小写,方便查找。那么,你只需要设置参数lower_case_table_names = 1,表名就不会区分了,字段名本身不区分大小写。

设置数据库服务器的方式

第一步,查看数据库collation相关信息

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)

第二步,在数据库配置文件中设置如下内容

[mysqld]

character-set-server = utf8

collation-server = utf8_general_cs

设置数据库的方式

创建数据库时,指定数据库默认字符集的同时,指定相应的排序规则。

create database testx default character set utf8 collate utf8_bin;

设置表的方式

创建表时,在指定表的字符集的同时,指定相应的排序规则,例如:

create table test_bin (

name varchar(32) not null primary key,

age int unsigned not null

) engine = InnoDB default character set utf8 COLLATE=utf8_bin;

设置字段的方式

创建表时,在指定字段字符集的同时,指定相应的排序规则

-- 定义字段

specifications varchar(100) CHARACTER SET utf8 COLLATE utf8_bin

-- 修改字段

ALTER TABLE tablename

MODIFY COLUMN columnname varchar(100) CHARACTER SET utf8 COLLATE utf8_bin;

SQL Server的大小写设置

SQL Server默认不区分大小写,如果要区分大小写可以通过如下两种方式设置

设置数据库的方式

ALTER DATABASE [DatabaseName] COLLATE Chinese_PRC_CI_AI

设置表的方式

--不区分大小写

ALTER TABLE 表名

ALTER COLUMN colunnname nvarchar(100) COLLATE Chinese_PRC_CI_AS

--区分大小写

ALTER TABLE 表名

ALTER COLUMN colunnname nvarchar(100) COLLATE Chinese_PRC_CS_AS

Chinese_PRC_CI_AS 和 Chinese_PRC_CS_AS 分别是不区分大小写和区分大小写存储规则,其中 Chinese_PRC两个参数代表大陆简体字UNICODE的排序规则,第三个参数代表了大小写规则,第四个参数代表了重音规则。

排序规则的后半部份即后缀 含义:

_BIN 二进制排序

_CI(CS) 是否区分大小写,CI不区分,CS区分

_AI(AS) 是否区分重音,AI不区分,AS区分 

_KI(KS) 是否区分假名类型,KI不区分,KS区分 

_WI(WS) 是否区分宽度 WI不区分,WS区分

区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。

区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,比较还将重音不同的字母视为不等。

区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。

区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项

Oracle的大小写设置

Oracle中默认排序和对比列值时默认区分大小写,一般不做修改

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190107G0TWVO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券