环境

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这种设计提供了一定的灵活性,但不同的字段都提供了设置,其实不是太有必要,但又不能说没有应用场景!

mysql8的collate问题和修改的更多相关文章

  1. MySql8.0.15 window 初始化 修改密码

    1.将安装包解压到安装目录: 2.将安装目录下的bin文件目录添加到系统变量中: 3.初始话数据库 mysqld --initialize --console 执行完成后,会打印 root 用户的初始 ...

  2. MySQL8,登陆root后修改root密码的正确方式

    如题,·MySQL8以上的修改密码方式和5不一样 网上搜到的无用答案很多,这里记一下版本8的正确修改方式,也方便自己和他人 USE mysql; ALTER user 'root'@'%' IDENT ...

  3. MySQL8.0.12版本密码修改策略问题

    查看密码策略(修改临时密码之后才可查看) show variables like 'validate_password%'; 8之前 validate_password_     8之后validat ...

  4. SQL SERVER修改排序规则——脚本篇

    在上篇MS SQL 排序规则总结中,大致就数据库服务器排序规则(或者叫数据库实例排序规则).数据库排序规则.列的排序规则粗浅的叙说了一遍,重点讲述了修改数据库服务器排序规则(数据库实例排序规则),其中 ...

  5. mysql修改表、字段、库的字符集

    在一次导入数据表(MYISAM)的经历:复制过来的表打开后中文出现乱码,肯定是字符集出现了不致的问题,所以从原数据库导出.sql文件,修改其中的创建表的语句,加入字符集DEFAULT CHARSET= ...

  6. msql修改字符

    我申请了一个jsp空间,把数据库传上去,编码如下mysql> show variables like '%char%';+--------------------------+--------- ...

  7. mysql数据库修改数据库编码,字段编码与表编码(转) good

    最近看了一下KIGG框架,发现在用EF + MYSQL数据库时,数据出现了乱码,用工具(Navicat )查看一下表category的结构发现 KIGG 数据库的默认情况是用latin1编码的(DEF ...

  8. MySQL8.0 on Windows下重置root密码的BUG

    很多人都知道MySQL忘记root密码之后可以通过skip-grant-tables来暂时免密登录MySQL,从而修改root密码,但是这种方式一方面有安全隐患,另一方面也并不怎么适用于Windows ...

  9. mysql8用户管理

    查看当前登录用户: 创建用户: create user '用户名'@'主机地址' identified with mysql_native_password by '密码'; 修改密码: alter ...

  10. utf8mb4的大小写敏感性测试及其修改方法

    utf8mb4的大小写敏感性测试及其修改方法 utf8mb4_ unicode_ ci 与 utf8mb4_ general_ ci 如何选择字符除了需要存储,还需要排序或比较大小,涉及到与编码字符集 ...

随机推荐

  1. ASP.NET Core 将文件夹内容输出为压缩包文件方法

    本文主要是告诉大家一个省内存的方法,将整个文件夹的内容作为一个压缩包输出,但是实际上没有申请那么多的内存,也不需要升级创建一个压缩包文件.原理是通过逐个读文件然后按照压缩包格式输出 在每个请求的方法可 ...

  2. 用 C# 写脚本 如何输出文件夹内所有文件名

    大部分在 Windows 下的脚本都是使用 bat 或 cmd 写的,这部分的脚本对我来说可读性不好.这个可读性也是很主观的,对我来说用 C# 写脚本的可读性很强,但是换个小伙伴就不是了.在 .NET ...

  3. Codeforces Round #922 (Div. 2) ABCD

    A. Brick Wall 很直白的贪心,显然就是全放横着的砖最优,每行中最多能放 \(\lfloor \dfrac{m}{2} \rfloor\) 个,答案为 \(n \cdot \lfloor \ ...

  4. 一、Doris演进史

    Apache Doris -- 为分析而生 Doris发展历程: Doris发展比较重要的关键节点与事件 #2008 - Doris1 :「筑巢引凤」的重要基石 早年,百度最主要的收入来源是广告.广告 ...

  5. Spring 是如何造出一个 Bean 的

    前言 使用 Java 作为第一开发语言的朋友们,相信大家或多或少的都使用过 Spring 这个开发框架,可以说 Spring 框架真是我们 Java 程序员的春天,在 Spring 中 Bean 是其 ...

  6. golang url解析

    package main import "fmt" import "net/url" import "strings" func main( ...

  7. vim简明文档

    替换 替换当前行第一个 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky 从当前行替换到最后一行 :%s/vivian/sky/g 替换所有行中 vivian 为 sky 查找 ...

  8. leaflet 基本案例-图层控件:基础图层+业务图层

    可执行示例一个,如下: <!DOCTYPE html> <html> <head> <title>Layers Control Tutorial - L ...

  9. 用 C 语言开发一门编程语言 — 跨平台的可移植性

    目录 文章目录 目录 前文列表 实现跨平台的可移植性 使用预处理器指令 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器l> 实现跨平台的可移植性 理想情况下,我希望我的代码可以 ...

  10. 自定义Naive UI的数据表格Data Table中按钮Button图标

    在Naive UI官网中详细介绍了[数据表格 Data Table](数据表格 Data Table - Naive UI)的使用方式 { title: "Action", key ...