欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解mysql?bit/json/enum/set?的數(shù)據(jù)存儲(chǔ)

 更新時(shí)間:2023年09月04日 10:03:30   作者:教練、我想打籃球  
這篇文章主要介紹了mysql?bit/json/enum/set?的數(shù)據(jù)存儲(chǔ),探究的主要內(nèi)容為 int 類類型的存儲(chǔ), 浮點(diǎn)類類型的存儲(chǔ), char 類類型的存儲(chǔ), blob 類類型的存儲(chǔ), enum/json/set/bit 類類型的存儲(chǔ),需要的朋友可以參考下

前言

這里主要是 由于之前的一個(gè) datetime 存儲(chǔ)的時(shí)間 導(dǎo)致的問題的衍生出來的探究 

探究的主要內(nèi)容為 int 類類型的存儲(chǔ), 浮點(diǎn)類類型的存儲(chǔ), char 類類型的存儲(chǔ), blob 類類型的存儲(chǔ), enum/json/set/bit 類類型的存儲(chǔ) 

本文主要 的相關(guān)內(nèi)容是 bit/json/enum/set 類類型的相關(guān)數(shù)據(jù)的存儲(chǔ)  

這部分?jǐn)?shù)據(jù) 客戶端 和 服務(wù)器這邊的交互 主要是以字符串的形式交互 

服務(wù)器這邊的存儲(chǔ) 相關(guān)的編碼之后的整形, json 為字符串  

 mysql 中 bit的服務(wù)器客戶端的數(shù)據(jù)交互 

測試數(shù)據(jù)表 以及數(shù)據(jù)如下

CREATE TABLE `tz_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `field1` bit(6) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
INSERT INTO `test`.`tz_test`(`id`, `field1`) VALUES (1, '7');

測試腳本如下 

package com.hx.test07;
/**
 * Test06MysqlTimezone
 *
 * @author Jerry.X.He
 * @version 1.0
 * @date 2023/4/24 16:26
 */
public class Test06MysqlTimezone {
    // Test06MysqlTimezone
    public static void main(String[] args) {
        String url = "jdbc:mysql://10.60.50.16:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&autoReconnectForPools=true&useSSL=false";
        String username = "root";
        String password = "root";
        JdbcTemplate jdbcTemplate = Test14GenExpertSql.getMysqlJdbcTemplate(url, username, password);
        String sql = " select * from tz_test; ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        int x = 0;
    }
}

mysql 是將給定的 bit 的數(shù)據(jù)以 字符串的形式 交互給客戶端的

mysql 服務(wù)器中對(duì)應(yīng)的類型為 BIT

2cd0f3156ad64e61b44bd67a0998751b.png

bit 這邊轉(zhuǎn)換, 是直接獲取的給定的字段對(duì)應(yīng)的 字節(jié)序列

這里是 new byte[] { 0x37 }

83c5ed4a21894aae976038d7ed0982e5.png

與客戶端的交互, 取出存放的 bits 的數(shù)據(jù) 

然后 拷貝到 val_buffer 響應(yīng)給客戶端, 這里輸出了一個(gè) '7' 

017b10e165dd489d97b409af286d339c.png

mysql 服務(wù)器 bit 的存儲(chǔ)

是轉(zhuǎn)換為單字節(jié)進(jìn)行存儲(chǔ)的  

477943a6549a41a6b575314d78bdc44c.png

 mysql 中 json 的服務(wù)器客戶端的數(shù)據(jù)交互 

和上面 bit 相同 

mysql 服務(wù)器中對(duì)應(yīng)的類型為 JSON

835ce55ef51f4ce986e7d61b18e679c8.png

與客戶端的交互, 以 my_charset_bin 反序列化為字符串, 格式化為 json 

然后輸出 json 字符串到給定的 buf 

6d7d5da51d3c4596b41034d27cf47271.png

mysql 服務(wù)器 json的存儲(chǔ)

將給定的 json 的 字符串以 my_charset_bin 序列化為 二進(jìn)制, 以二進(jìn)制的形式存儲(chǔ)

以下代碼 基于 mysql-8.0.23

6a43fe7b0c6a443e8b1a3e16c7e67ac7.png

e6018e19fd5642e2ad35749a475daa20.png

 mysql 中 enum的服務(wù)器客戶端的數(shù)據(jù)交互 

和上面 bit 相同 

mysql 服務(wù)器中對(duì)應(yīng)的類型為 STRING? 為什么不是 ENUM 

b44f31187e1845188fa1bea22c801ab8.png

與客戶端的交互, 獲取當(dāng)前字段 在枚舉的索引, 然后 根據(jù)配置的選項(xiàng)列表 獲取對(duì)應(yīng)的字符串表示

45b75211e57f465d8ea6581f0b66cc80.png

mysql 服務(wù)器 enum 的存儲(chǔ)

根據(jù)輸入的 枚舉字符 獲取索引, 然后 存儲(chǔ)的是具體的索引

0d2e290afbdd4f73a96a6156ff6a6d0d.png

假設(shè)輸入的字段值 不在枚舉列表中, 則存放的是 0, 表示的空字符串

0310debc806941f8a4ac3e998e258719.png

數(shù)據(jù)的存儲(chǔ)是根據(jù)索引的值域 按不同的長度進(jìn)行存儲(chǔ)

a24938127ef84ec991da044672f576d9.png

 mysql 中 set 的服務(wù)器客戶端的數(shù)據(jù)交互

和上面 bit 相同 

mysql 服務(wù)器中對(duì)應(yīng)的類型為 STRING? 為什么不是 SET 

acf9a8e7121742368676ef274b3dcfb8.png

與客戶端的交互, 從當(dāng)前字段的值中 按照權(quán)重 獲取相應(yīng)的字符串表示, 并用 分隔符 連接起來

d3ed814b700a465eb7a1700212ffcbb6.png

mysql 服務(wù)器 set 的存儲(chǔ)

可以看到 boy, girl, unknown 的索引分別為 0, 1, 2, 權(quán)重分別為 1, 2, 4

因此 這里存儲(chǔ)的 girl, unknown 為 2 + 4 = 6

數(shù)據(jù)的存儲(chǔ) 和上面 enum 一致, 根據(jù)存儲(chǔ)的值的取值區(qū)間 按不同的長度進(jìn)行存儲(chǔ) 

52b6ba161199459e9d2d631e20b62de8.png

對(duì)于匹配不上的值 這里的處理是 直接過濾掉

299dcbdd87354717b7238bfb03f8ac31.png

到此這篇關(guān)于mysql bit/json/enum/set 的數(shù)據(jù)存儲(chǔ)的文章就介紹到這了,更多相關(guān)mysql 數(shù)據(jù)存儲(chǔ)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論