写在前面:MySQL 及SQLServer 对于Char, Varchar, Text 默认使用_ci作为字符的校对规则,所以,这三种类型的字段中的值,在增改查的过程中是不严格区分大小写的。
而Oracle是默认严格区分大小写的。
另外:MySql 中有一个类型叫NVARCHAR,这是一个字符长度为单位的数据类型,该类型不支持utf8mb4, 支持utf8, 且collation校对规则默认为utf_general_ci,忽略大小写,而不是跟随collation_server,需在定义字段时指定校对规则,如:
ROW_ID NVARCHAR(100) CHARACTER SET utf8 COLLATE utf8_bin primary key NOT NULL
从空间和使用的角度来看,个人不是很建议在定义字段时将类型定义为NVARCHAR。
关于字符集和校对规则,这篇文章写的比较详细及准确:
那么设置表字段中的校对规则呢,个人总结常用方式有两种:
1.创建表字段时指定 charset 及 collate
create table TABLE_TL (ROW_ID VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin primary key NOT NULL, OBJECT_VERSION_NUMBER NUMERIC(9) not null, LAST_UPDATE_DATE DATETIME not null, LAST_UPDATED_BY VARCHAR(64) not null, LAST_UPDATE_LOGIN VARCHAR(32), CREATED_BY VARCHAR(64) not null, CREATION_DATE DATETIME not null )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_bin;
2.修改mysql配置文件,在启动时直接指定charset 及 collate COLLATION ‘utf8_unicode_ci‘ is not valid for CHARACTER SET ‘utf8mb4‘
vi /etc/my.conf
[client] default-character-set=utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_bin init_connect=‘SET NAMES utf8mb4‘ skip-character-set-client-handshake = true [mysql] default-character-set = utf8mb4
重启mysql服务
systemctl restart mysqld
更多资料可查阅MySQL官方文档说明:
https://dev.mysql.com/doc/refman/5.7/en/charset-server.html