zoukankan      html  css  js  c++  java
  • 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这种设计提供了一定的灵活性,但不同的字段都提供了设置,其实不是太有必要!

  • 相关阅读:
    GIT更改clone方式 ;GIT的SSH配置
    关于web性能测试的一些总结
    pyinstaller 打包selenium程序后,消除chromdriver 控制台黑框
    pyinstaller 打包exe 遇到的坑
    jenkins 新增节点的3种方式
    class
    python 语法糖
    模块 subprocess
    模块 re
    模块 logging
  • 原文地址:https://www.cnblogs.com/lzfhope/p/14044759.html
Copyright © 2011-2022 走看看