mysql8的collate問題和修改

2022-07-11 16:06:14 字數 1408 閱讀 9326

環境

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,

''';')

ascc

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 做啥用,請參考

根據原文的意思: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問題 mysql8中的問題

only full group by 對於group by聚合操作,如果在 select 中的列,沒有在 group by 現,那麼這個sql是不合法的,因為列不在group by從句中。no auto value on zero 該值影響自增長列的插入。預設設定下,插入0或null代表生成下乙個自...

mysql8建立不了使用者 mysql8建立使用者

假如是mysql8版本的話,使用 grant all privileges to 使用者 localhost identified by 自定義密碼 會報錯,因為要先建立使用者再進行賦權,不能同時進行 建立使用者 create user 使用者名稱 localhost identified by 密...

mysql 8 命令 Mysql8常用命令

1 安裝 移除原來的mysql服務 mysqld remove mysql mysqld install 2 初始化 mysqld initialize 3 啟動 net start mysql 4 登陸 mysql u root p 5 修改密碼 mysqld shared memory skip...