MySql 大小写之小结

写在前面:MySQL 及SQLServer 对于Char, Varchar, Text 默认使用_ci作为字符的校对规则,所以,这三种类型的字段中的值,在增改查的过程中是不严格区分大小写的。

而Oracle是默认严格区分大小写的。

另外:MySql 中有一个类型叫NVARCHAR,这不是MySQL的标准类型,这是一个扩展类型这是一个字符长度为单位的数据类型,该类型不支持utf8mb4, 仅支持utf8, 且collation校对规则默认为utf_general_ci,忽略大小写,而不是跟随collation_server,需在定义字段时指定校对规则,如:

ROW_ID NVARCHAR(100) CHARACTER SET utf8 COLLATE utf8_bin primary key NOT NULL

从空间和使用的角度来看,个人不是很建议在定义字段时将类型定义为NVARCHAR。

关于字符集和校对规则,这篇文章写的比较详细及准确:

mysql中的字符集和校对规则(mysql校对集)

那么设置表字段中的校对规则呢,个人总结常用方式有两种:

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

原文地址:https://www.cnblogs.com/huanghongbo/p/14733137.html