国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

不同子系統采用不同MySQL編碼LATIN1和UTF8的兼容

crossea / 2375人閱讀

摘要:程序處理這是一個歷史遺留系統舊的系統是開發的插入數據的時候沒有統一各個層次服務器數據庫表列的編碼這個情況基本上是的默認安裝導致的實際的數據編碼為而采用開發的新的系統需要和這個遺留系統公用數據庫采用的是編碼碰到的問題是代碼中獲取到的中文為亂碼

程序處理

這是一個歷史遺留系統, 舊的系統是C++開發的, 插入數據的時候, 沒有統一MYSQL各個層次(服務器, 數據庫, 表, 列)的編碼, 這個情況基本上是MYSQL的默認安裝導致的, 實際的數據編碼為LATIN1, 而采用Java 開發的新的系統需要和這個遺留系統公用數據庫, 采用的是UTF8編碼, 碰到的問題是Java代碼中獲取到的中文為亂碼.

搞清楚了這個問題, Java中把亂碼轉換為正常顯示的UTF8編碼的中文很簡單, 下面是轉換代碼

/**
 * LATIN1轉UTF8
 *
 * @param latin1 LATIN1(ISO_8859_1)字符串
 * @return UTF8字符串
 */
public String encodingConvert(String latin1) {
    return new String(
        latin1.getBytes(StandardCharsets.ISO_8859_1),
        StandardCharsets.UTF_8
    );
}

這是使用程序代碼的處理方式, 有的時候我們需要直接從SQL返回的結果集中直接拿到UTF8的數據, 看下面

SQL內置函數轉換

上面通過程序代碼可以處理字符集的轉換, 下面通過SQL的方式轉換

CONVERTCAST函數: 首先需要把LATIN1的轉為BINARY, 然后再把BINARY轉為UTF8
SELECT
    USER.USERID AS USERID,
    USER.NICKNAME AS NICKNAME_LATIN1,
    CONVERT (
        CAST(
            CONVERT ( USER.NICKNAME USING latin1 ) AS BINARY 
        ) USING utf8 
    ) AS NICKNAME_UTF8 
FROM
    USER 
WHERE
    USERID = 15889;

其中 LATIN1_COLUMN 是LATIN1 編碼的字符集

最后, 我們可以把這樣的轉換做成一張視圖, 程序就不用再轉換了.

CREATE VIEW V_USER AS 
SELECT
    USER.USERID AS USERID,
    CONVERT (
        CAST(
            CONVERT ( USER.NICKNAME USING latin1 ) AS BINARY 
        ) USING utf8 
    ) AS NICKNAME
FROM
    USER;

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72266.html

相關文章

  • MySql(二)——字符集比較規則

    摘要:二字符集和比較規則一些重要的字符集共收錄個字符,包括空格標點符號數字大小寫字母和一些不可見字符。這個字符集也有一個別名收錄漢字個,其他文字符號個。 MySql(二)——字符集和比較規則 一些重要的字符集 ASCII 共收錄128個字符,包括空格、標點符號、數字、大小寫字母和一些不可見字符。由于總共才128個字符,所以可以使用1個字節來進行編碼 ISO 8859-1 共收錄256...

    寵來也 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<