詳解mysql?bit/json/enum/set?的數(shù)據(jù)存儲(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
bit 這邊轉(zhuǎn)換, 是直接獲取的給定的字段對(duì)應(yīng)的 字節(jié)序列
這里是 new byte[] { 0x37 }
與客戶端的交互, 取出存放的 bits 的數(shù)據(jù)
然后 拷貝到 val_buffer 響應(yīng)給客戶端, 這里輸出了一個(gè) '7'
mysql 服務(wù)器 bit 的存儲(chǔ)
是轉(zhuǎn)換為單字節(jié)進(jìn)行存儲(chǔ)的
mysql 中 json 的服務(wù)器客戶端的數(shù)據(jù)交互
和上面 bit 相同
mysql 服務(wù)器中對(duì)應(yīng)的類型為 JSON
與客戶端的交互, 以 my_charset_bin 反序列化為字符串, 格式化為 json
然后輸出 json 字符串到給定的 buf
mysql 服務(wù)器 json的存儲(chǔ)
將給定的 json 的 字符串以 my_charset_bin 序列化為 二進(jìn)制, 以二進(jìn)制的形式存儲(chǔ)
以下代碼 基于 mysql-8.0.23
mysql 中 enum的服務(wù)器客戶端的數(shù)據(jù)交互
和上面 bit 相同
mysql 服務(wù)器中對(duì)應(yīng)的類型為 STRING? 為什么不是 ENUM
與客戶端的交互, 獲取當(dāng)前字段 在枚舉的索引, 然后 根據(jù)配置的選項(xiàng)列表 獲取對(duì)應(yīng)的字符串表示
mysql 服務(wù)器 enum 的存儲(chǔ)
根據(jù)輸入的 枚舉字符 獲取索引, 然后 存儲(chǔ)的是具體的索引
假設(shè)輸入的字段值 不在枚舉列表中, 則存放的是 0, 表示的空字符串
數(shù)據(jù)的存儲(chǔ)是根據(jù)索引的值域 按不同的長度進(jìn)行存儲(chǔ)
mysql 中 set 的服務(wù)器客戶端的數(shù)據(jù)交互
和上面 bit 相同
mysql 服務(wù)器中對(duì)應(yīng)的類型為 STRING? 為什么不是 SET
與客戶端的交互, 從當(dāng)前字段的值中 按照權(quán)重 獲取相應(yīng)的字符串表示, 并用 分隔符 連接起來
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ǔ)
對(duì)于匹配不上的值 這里的處理是 直接過濾掉
到此這篇關(guān)于mysql bit/json/enum/set 的數(shù)據(jù)存儲(chǔ)的文章就介紹到這了,更多相關(guān)mysql 數(shù)據(jù)存儲(chǔ)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql查詢昨天 一周前 一月前 一年前的數(shù)據(jù)
這篇文章主要介紹了mysql查詢昨天 一周前 一月前 一年前的數(shù)據(jù)的方法,需要的朋友可以參考下2014-05-05Mysql5.6啟動(dòng)內(nèi)存占用過高解決方案
vps的內(nèi)存為512M,安裝好nginx,php等啟動(dòng)起來,mysql死活啟動(dòng)不起來看了日志只看到對(duì)應(yīng)pid被結(jié)束了,后跟蹤看發(fā)現(xiàn)是內(nèi)存不足被killed;mysql5.6啟動(dòng)內(nèi)存占用過高怎么辦呢,下面小編給大家解答下2016-09-09MYSQL優(yōu)化之?dāng)?shù)據(jù)表碎片整理詳解
在日常的數(shù)據(jù)庫維護(hù)中,在給客戶制定維護(hù)方案時(shí),都會(huì)有降低高水位此類的建議 建議每年年終定期做數(shù)據(jù)整理,下面這篇文章主要給大家介紹了關(guān)于MYSQL優(yōu)化之?dāng)?shù)據(jù)表碎片整理的相關(guān)資料,需要的朋友可以參考下2022-04-04Mysql中 show table status 獲取表信息的方法
這篇文章主要介紹了Mysql中 show table status 獲取表信息的方法的相關(guān)資料,需要的朋友可以參考下2016-03-03mysql執(zhí)行sql文件報(bào)錯(cuò)Error: Unknown storage engine‘InnoDB’的解決方法
最近在執(zhí)行一個(gè)innoDB類型sql文件的時(shí)候,發(fā)現(xiàn)系統(tǒng)報(bào)錯(cuò)了,通過查找相關(guān)的資料終于解決了,所以下面這篇文章主要給大家介紹了關(guān)于mysql執(zhí)行sql文件時(shí)報(bào)錯(cuò)Error: Unknown storage engine 'InnoDB'的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07在MySQL中創(chuàng)建帶有IN和OUT參數(shù)的存儲(chǔ)過程的方法
這篇文章主要介紹了在MySQL中創(chuàng)建帶有IN和OUT參數(shù)的存儲(chǔ)過程的方法,在一定程度上簡化了操作,需要的朋友可以參考下2015-06-06