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這種設計提供了一定的靈活性,但不同的字段都提供了設置,其實不是太有必要!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM