• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
黄洪波写点东西的地方
博客园    首页    新随笔    联系   管理    订阅  订阅
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

posted on 2021-05-05 22:52  红无酒伤  阅读(128)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3