著重基礎之—MySql Blob類型和Text類型

來源:互聯網
上載者:User

標籤:路徑   回顧   color   mda   odi   ext   配置   dash   初步   

著重基礎之—MySql Blob類型和Text類型—二進位儲存 

  在經曆了幾個Java項目後,遇到了一些問題,在解決問題中體會到基礎需要不斷的回顧與鞏固。

  最近做的項目中,提供給介面調用方資料同步介面,傳輸的資料格式是Json串。由於json串的結構層級較多,資料量也不少。在設計資料庫的時候,選擇了Blob類型做為欄位類型。一切的一切就打這開始,同步服務正常運作,但是問題慢慢的暴露了出來,用戶端在暫時我所提供的資料的時候,中文總是顯示亂碼,亂碼,亂碼,一直亂碼。

  問題的分析路徑

  1.查看了資料庫連接字串,characterEncoding=utf8 ,配置正常。

  2.詢問介面調用方,編碼格式一致,utf8。

  3.查看資料庫編碼格式,utf8,正常。

  4.查看資料表編碼格式,utf8,正常。

  然後問題依然存在,中文資料通過查詢指令碼查出來的結果都顯示正常,但是一到網頁上依然是亂碼,亂碼。於是把線上的資料匯出到本地一份,接著觀察,發現中文亂碼處可以看出,一個中文被3個位元組所代替,考慮到utf8編碼格式下,一個中文佔3個位元組,問題的原因初步可以斷定是資料的儲存格類型引起的。然後查閱了Mysql Blob 類型的說明,Blob儲存的其實是位元據,我們來看看Blob的定義:

 

  BLOB是一個二進位大對象,可以容納可變數量的資料。有4種BLOB類型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長度不同。BLOB 列被視為二進位字串(位元組字串)。BLOB列沒有字元集,並且排序和比較基於列值位元組的數值值。我們再來看看常用的大文本類型Text的定義,這樣能有一個對比。

  TEXT列被視為非二進位字串(字元字串),TEXT列有一個字元集,並且根據字元集的校對規則對值進行排序和比較。

 

  通常Mysql 字元集的配置就告訴了Mysql在執行查詢時所呈現的編碼格式,就拿Blob中儲存的位元據舉例來說:在mysql 控制台執行查詢命令時,控制台自身就幫我們完成了由位元組到文本的轉換,相應地中文也進行了正常的轉換。記得,此處我們強調了mysql控制台,或者說就是我們常用的shell命令,mysql -u *** -p 指令碼執行的控制台環境。位元組——文本的轉換Mysql 控制台按照utf8的編碼格式進行了轉換。  這也是為什麼我們登陸到mysql服務後,mysql -u *** -p 登陸mysql伺服器後,執行查詢指令碼的到正常資料的原因。

 

  那麼為什麼通過程式串連mysql返回的結果不對呢,是因為java程式串連mysql執行查詢後,Blob類型本身是沒有字元集的,也就不會做根據字元集的校對,所以java串連mysql執行查詢返回的Byte[]位元組數組是沒有經過任何字元集校隊的,即便你存入Blob的資料本身就是符合utf8編碼格式的,最終得到的結果依然會是亂碼,除非你在程式中有相應的處理邏輯。

 

  好了,到這終於解決了中文亂碼展示的問題,同時也明白了亂碼出現的原因。對Blob類型的認識也更加深刻。

 

  小提示:如果你的BLOB中儲存的資料原本就是符合utf8編碼格式的,同時你的資料庫以及資料表的編碼格式的符合utf8,那麼欄位類型由BLOB變更為Text類型時,資料時可是保證正常轉換的,當然,別忘記了欄位長度要保持一個量級。這個我自己測試了下,沒有問題。

 

  

 

著重基礎之—MySql Blob類型和Text類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.