[mysql]升級MySQL 8.0的詭異故障,utf8mb4_0900_ai_ci是什麼?

參考網址:https://kknews.cc/zh-tw/code/63ya49m.html

中間的0900,它對應的是Unicode 9.0的規範

所以,utf8mb4_0900_ai_ci到底是個什麼東西呢?其實,它是個collation。

說起「字符集」,許多人想當然認為,給每個字符分配了一個編碼,並且能存儲、能傳輸,這就夠了。其實這當然不夠,我們不但需要給每個字符分配編碼,讓它們能存儲、能傳輸,還需要定義一套關係來組織它們,找到它們之間的聯繫。這套關係的定義,就是collation。

MySQL 8.0之後,默認collation不再像之前版本一樣是是utf8mb4_general_ci,而是統一更新成了utf8mb4_0900_ai_ci。

既然如此,解決辦法也很簡單,用alter table table_name collate utf8mb4_0900_ai_ci顯式統一所有表的collation,問題就解決了。

我們可以多想想,把character set和collation分開,到底有什麼好處?其實好處很多。如果把字符看作個人,character set就相當於驗明正身,給每個字符發張身份證,而collation相當於告訴大家,排隊的時候誰在前誰在後。collation有多套,就相當於可以靈活按身高、體重、年齡、出身地等等因素來排序,卻完全不會受到身份證號的干擾。

sed -e 's/要取代的文字/取代文字/' -i file

utf8mb4_0900_ai_ci替换为utf8_general_ci
sed -e 's/utf8mb4_0900_ai_ci/utf8_general_ci/' -i file

utf8mb4替换为utf8
sed -e 's/utf8mb4/utf8/' -i file
中間的0900,它對應的是Unicode 9.0的規範

 

原文網址:https://kknews.cc/code/63ya49m.html

中間的0900,它對應的是Unicode 9.0的規範

 

原文網址:https://kknews.cc/code/63ya49m.html

中間的0900,它對應的是Unicode 9.0的規範

 

原文網址:https://kknews.cc/code/63ya49m.html

本篇發表於 程式設計。將永久鏈結加入書籤。