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