mysql8的collate问题和修改

环境

os:centos 7.6

数据库:8.0.22 64bit

 

问题:

字段a,b它们的collate不一样,结果关联的时候,发现错误。

查询了以下,发现挺多的,逐个修改听麻烦的,于是整理了如下sql:

复制代码
复制代码
-- -- 生成需要修改的 内容
-- 暂时用于 varchar类型字段,其它没有试验过
-- 也可以用用于检查
SELECT 
  CONCAT(
    'alter table ',
    table_schema,
    '.',
    table_name,
    ' modify ',
    column_name,
    ' ',
    column_type,
    CASE
      WHEN is_nullable = 'YES' 
      THEN ' null ' 
      ELSE ' not null ' 
    END,
    ' COLLATE utf8mb4_0900_ai_ci ',
    ' comment ''',
    column_comment,
    ''';'
  ) AS cc 
FROM
  information_schema.`COLUMNS` a 
WHERE table_schema IN (
    'rap_goldhill',
    'rap_goldhill_coll'
  ) 
  AND collation_name != 'utf8mb4_0900_ai_ci' 
ORDER BY table_name ;
复制代码
复制代码

几秒Ok!

collcate 做啥用,请参考 https://www.cnblogs.com/qcloud1001/p/10033364.html

根据原文的意思:collate的作用是用于确定排序规则

utf8mb4_0900_ai_ci 含义:

utf9mb4:表示适用于字符集 utf8mb4

0900:指代unicode比较算法的编号( Unicode Collation Algorithm version)

ai:表示accent insensitive(发音无关),例如e, è, é, ê 和 ë是一视同仁的

ci:这是Case Insensitive的缩写,即大小写无关,也就是说"A"和"a"在排序和比较的时候是一视同仁的

utf8mb4_0900_ai_ci的整个含义就是说:适用于utf8mb4的部分音调、大小写,编号为0900的排序算法

因为部分音调和大小写,所以比较速度比较快,但可能不能满足特定业务要求,特定的表应该根据业务需要来设定。

mysql这种设计提供了一定的灵活性,但不同的字段都提供了设置,其实不是太有必要!

posted @   dreamw  阅读(622)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2020-06-22 ADO.NET调用存储过程
2020-06-22 C#中数组、ArrayList和List三者的区别
2020-06-22 You-Dont-Need-JQuery (你不需要JQuery)
2020-06-22 JavaScript对象之document对象
2020-06-22 JSON对象与JavaScript对象的区别
2020-06-22 sqlserver 批量更新
点击右上角即可分享
微信分享提示