在数据库的使用过程中,经常会遇到各种各样的问题,查找问题原因也是几经周折,煞费苦心,结果哭笑不得。一个小的问题可能导致很大的麻烦,所以想要做到事半功倍,对数据库的了解以及在做数据库设计的时候就应该考虑很多问题,例如本文将要阐述的大小写问题。不同的数据库默认的大小写敏感设置不尽相同,并且可以通过多种方式进行设置。
内容提要
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中默认排序和对比列值时默认区分大小写,一般不做修改
领取专属 10元无门槛券
私享最新 技术干货