用OMS從MySQL遷移到OceanBase,字符集utf8與utf8mb4的差異

一、問題背景

在一次從MySQL數據庫遷移到OceanBase的MySQL租戶過程中,出現了一個轉換提示:
[WARN][CONVER]?he table charset:utf8->utf8mb4,
你可能會擔心這種轉換可能導致字符集不兼容的問題。但通過查閱相關資料可知,utf8mb4實際上是utf8的超集,因此可以放心進行遷移。

接下來,將詳細講解 utf8 與 utf8mb4 之間的區別。

二、起源

MySQL在5.5.3之后增加了這個utf8mb4的編碼,mb4就是most bytes 4的意思,專門用來兼容四字節的unicode。好在utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉換。當然,為了節省空間,一般情況下使用utf8也就夠了。可以簡單的理解 utf8mb4 是目前最大的一個字符編碼,支持任意文字。

三、為什么mysql有utf8和utf8mb4兩種幾乎差不多的字符集

utf8 是 Mysql 中的一種字符集,只支持最長三個字節的 UTF-8字符,也就是 Unicode 中的基本多文本平面。Mysql 中的 utf8 為什么只支持持最長三個字節的 UTF-8字符呢?我想了一下,可能是因為 Mysql 剛開始開發那會,Unicode 還沒有輔助平面這一說呢。那時候,Unicode 委員會還做著 “65535 個字符足夠全世界用了”的美夢。Mysql 中的字符串長度算的是字符數而非字節數,對于 CHAR 數據類型來說,需要為字符串保留足夠的長。當使用 utf8 字符集時,需要保留的長度就是 utf8 最長字符長度乘以字符串長度,所以這里理所當然的限制了 utf8 最大長度為 3,比如 CHAR(100) Mysql 會保留 300字節長度。至于后續的版本為什么不對 4 字節長度的 UTF-8 字符提供支持,我想一個是為了向后兼容性的考慮,還有就是基本多文種平面之外的字符確實很少用到。
要在 Mysql 中保存 4 字節長度的 UTF-8 字符,需要使用 utf8mb4 字符集,但只有 5.5.3 版本以后的才支持。我覺得,為了獲取更好的兼容性,應該總是使用 utf8mb4 而非 utf8. 對于 CHAR 類型數據,utf8mb4 會多消耗一些空間,根據 Mysql 官方建議,使用 VARCHAR 替代 CHAR。

四、為什么要使用utf8mb4字符集

既然utf8應付日常使用完全沒有問題,那為什么還要使用utf8mb4呢? 低版本的MySQL支持的utf8編碼,最大字符長度為 3 字節,如果遇到 4 字節的字符就會出現錯誤了。三個字節的 UTF-8 最大能編碼的 Unicode 字符是 0xFFFF,也就是 Unicode 中的基本多文平面(BMP)。也就是說,任何不在基本多文平面的 Unicode字符,都無法使用MySQL原有的 utf8 字符集存儲。這些不在BMP中的字符包括哪些呢?最常見的就是Emoji 表情(Emoji 是一種特殊的 Unicode 編碼,常見于 ios 和 android 手機上),和一些不常用的漢字,以及任何新增的 Unicode 字符等等。那么utf8mb4比utf8多了什么的呢?多了emoji編碼支持.如果實際用途上來看,可以給要用到emoji的庫或者說表,設置utf8mb4.比如評論要支持emoji可以用到。

五、新建mysql庫的排序規則

utf8_unicode_ci比較準確,utf8_general_ci速度比較快。通常情況下 utf8_general_ci的準確性就夠我們用的了,在我看過很多程序源碼后,發現它們大多數也用的是utf8_general_ci,所以新建數據 庫時一般選用utf8_general_ci就可以了如果是utf8mb4那么對應的就是 utf8mb4_general_ci utf8mb4_unicode_ci

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/904347.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904347.shtml
英文地址,請注明出處:http://en.pswp.cn/news/904347.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MATLAB中tabulate函數——先驗概率的簡單估計

load fisheriris X meas(:,1:2); Y species; labels unique(Y); tabulate(Y)ValueCountPercentsetosa5033.33%versicolor5033.33%virginica5033.33%

《Python星球日記》第28天:數據獲取與可視化(綜合項目)

名人說:路漫漫其修遠兮,吾將上下而求索。—— 屈原《離騷》 創作者:Code_流蘇(CSDN)(一個喜歡古詩詞和編程的Coder??) 專欄:《Python星球日記》,限時特價訂閱中ing 目錄 一、項目概述二、數據獲取1. 準備工作2. 使用 `requests` 獲取網頁內容3. 使用 `BeautifulSoup`…

基于深度學習的圖像識別技術:從原理到應用

前言 在當今數字化時代,圖像識別技術已經滲透到我們生活的方方面面,從智能手機的人臉解鎖功能到自動駕駛汽車對交通標志的識別,再到醫療影像診斷中的病變檢測,圖像識別技術正以其強大的功能和廣泛的應用前景,改變著我們…

限免開關實施版本保護措施,保證項目灰度發布安全

迭代用戶限免權限校驗業務 新增限免開關實現普通用戶權益更新,實施版本保護措施,保證項目灰度發布安全; // 是否展示限免標識 func (t *BasePrivilegeService) IsPromotionFree(p consumParams) bool {// 限免開關isFreeUseOpen : p.cfg.Vip…

從 AWS Marketplace 開始使用 AssemblyAI 的語音轉文本模型構建語音智能

語音智能和語音轉文本 (STT) 技術已變得至關重要,因為組織每天收集數千小時的電話、會議和客戶互動。僅靠原始音頻并不能推動決策 - 組織需要智能來大規模地從語音數據中提取價值。語音智能結合了語音識別、自然語言處理 (NLP&…

Android組件化 -> Debug模式下,本地構建module模塊的AAR和APK

本地構建module模塊的AAR gradle.properties isCommonApp false模塊的build.gradle apply plugin: com.android.library:module模塊編譯manifest.srcFile src/main/AndroidManifest.xml:讀取沒有啟動App和Activity的配置文件 if (isCommonApp.toBoo…

FlexibleButton:一個輕巧靈活的按鍵處理庫,讓你的按鍵處理更簡單

在嵌入式系統開發中,按鍵輸入處理是一個常見且重要的環節。然而,許多開發者在處理按鍵時,往往會遇到按鍵消抖、組合按鍵、長按/短按等功能實現的復雜性。如何在保證系統高效運行的同時,簡化按鍵事件的處理呢? 今天&…

探索程序員薪資背后的秘密與未來:智能化工具如何助力職場發展

最新接入DeepSeek-V3模型,點擊下載最新版本InsCode AI IDE 探索程序員薪資背后的秘密與未來:智能化工具如何助力職場發展 引言 在當今數字化時代,程序員作為科技發展的核心力量,其職業前景和薪資水平備受關注。隨著人工智能和自…

【STM32單片機】#14 PWR電源控制

主要參考學習資料: B站江協科技 STM32入門教程-2023版 細致講解 中文字幕 開發資料下載鏈接:https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 單片機套裝:STM32F103C8T6開發板單片機C6T6核心板 實驗板最小系統板套件科協 目錄 PWR…

第十五屆藍橋杯單片機國賽-串口解析

串口通信像是藍橋杯單片機組國賽中一個若隱若現的秘境,總在不經意間為勇者們敞開大門。然而,初次探索這片領域的冒險者,常常會被其神秘莫測的特性所震懾,黯然退場(編不下去了,直接進入正題)。 附…

深入探索 51 單片機:從入門到實踐的全面指南

深入探索 51 單片機:從入門到實踐的全面指南 一、引言 在嵌入式系統發展的漫長歷程中,51 單片機猶如一顆璀璨的明星,雖然誕生已有數十年,但至今仍在眾多領域發揮著重要作用。它以結構簡單、易于學習、成本低廉等優勢&#xff0c…

GD32F470+CH395Q

第一步:資料下載 以太網協議棧芯片 CH395 - 南京沁恒微電子股份有限公司 第二步:準備工程 (1) 首先準備一個編譯無報錯、可以正常打印和延時的工程文件,官方例程采用STM32F1芯片,但本文采用GD32F470芯片 …

Linux 怎么使用局域網內電腦的網絡訪問外部

一次性 export http_proxy"http://192.168.0.188:7890" export https_proxy"http://192.168.0.188:7890"一直生效 寫入 ~/.bashrc(或 ~/.bash_profile) nano ~/.bashrc加入這一行: export http_proxy"http://19…

Mysql進階篇1_存儲引擎、索引、SQL性能分析指令

文章目錄 1.存儲引擎InnoDBMyISAMMemory存儲引擎選擇和對比 2.索引索引結構索引分類索引語法索引使用(建議看完第3節后觀看)!!!mysql如何使用索引查詢數據(個人理解) 3.SQL性能分析SQL執行頻率慢…

LeetCode 熱題 100 118. 楊輝三角

LeetCode 熱題 100 | 118. 楊輝三角 大家好,今天我們來解決一道經典的算法題——楊輝三角。這道題在 LeetCode 上被標記為簡單難度,要求生成楊輝三角的前 numRows 行。楊輝三角是一個經典的組合數學問題,每一行的數字都是其正上方和正左上方…

修改或禁用Cursor的全局搜索默認快捷鍵

在 Cursor 中,默認情況下 雙擊 Shift 會打開 全局搜索(Quick Open),類似于 VS Code 的 CtrlP 功能。如果你想修改或禁用這個快捷鍵,可以按照以下步驟操作: 1. 打開快捷鍵設置 方法 1:按下 Ctrl…

HarmonyOS Device Connector(hdc)

它是為開發人員提供的用于調試的命令行工具,通過該工具可以在windows/linux/mac系統上與設備進行交互。 hdc分為三部分: client:運行在電腦端的進程,開發者在執行hdc命令時啟動該進程,命令結束后進程退出。 server&…

開源PDF解析工具Marker深度解析

開源PDF解析工具Marker深度解析 檢索增強生成(RAG)系統的第一步就是做 pdf 解析,從復雜多樣的 pdf 中提取出干凈準確的文本內容。現有的最優秀的開源工具有兩個:Marker 和 MinerU。因為 Marker 是個人開發者做的,文檔…

ARM子程序調用與返回

子程序(也叫過程、函數、方法)是一個能被調用和執行并返回到調用點那條指令的代碼 段。 兩個問題:如何將參數傳遞給子程序或從子程序中傳遞出來?怎么從子程序返回到調用點? 指令BSR Proc_A調用子程序Proc_A。 處理器將…

算力經濟模型推演:從中心化到去中心化算力市場的轉變(區塊鏈+智能合約的算力交易原型設計)

一、算力經濟的歷史脈絡與范式轉移 1.1 中心化算力市場的演進困境 傳統算力市場以超算中心、云計算平臺為核心載體,其運營模式呈現強中心化特征。中國移動構建的"四算融合"網絡雖實現百萬級服務器的智能調度,但動態資源分配仍受制于集中式控…