wordpress 推薦 配置寧波核心關(guān)鍵詞seo收費(fèi)
測(cè)試環(huán)境 mysql5.7.44
達(dá)夢(mèng)2024Q2季度版
前言
在mysql 中存在 tinyint(1)的用法來實(shí)現(xiàn)存儲(chǔ)0 1 作為boolean的標(biāo)識(shí)列;但是在達(dá)夢(mèng)并不允許使用 tinyint(1)來定義列,只能使用 tinyint 即 取值范圍為:-128 ~ +127;實(shí)際上mysql 使用tinyint(1)定義列,取值范圍仍為-128 ~ +127,并非 {0, 1} ;但是在mysql 中當(dāng) tinyint存儲(chǔ)為0 1 時(shí),jdbc 使用getObjecct獲取改列的值類型為boolean,并非數(shù)字,這又是怎么回事呢。先說答案,為了在達(dá)夢(mèng)JDBC獲取到boolean類型需要在數(shù)據(jù)庫(kù)中將對(duì)應(yīng)列改為bit 類型。
分析
mysql實(shí)驗(yàn)
tinyint取值范圍
插入數(shù)據(jù)驗(yàn)證mysql 的 tinyint(1)的存儲(chǔ)范圍是否為 {0, 1}
create table test_tinyint_20240911(a1 tinyint(1),name varchar(20));
insert into test_tinyint_20240911 values(100,'test100');
insert into test_tinyint_20240911 values(133,'test100');
在我的測(cè)試環(huán)境中mysql 將超出的列值自動(dòng)進(jìn)行了截?cái)?#xff0c;取了取值上限
那么,可以證明的 tinyint(1)的存儲(chǔ)范圍不為 {0, 1}
tinyint jdbc返回值類型
- 插入boolean 返回boolean getBoolean
- 插入數(shù)字返回布爾 getObject
- 插入數(shù)字返回?cái)?shù)字 getObject
- 插入數(shù)字返回?cái)?shù)字 getInt
- 定義tinyint(13)插入數(shù)字返回?cái)?shù)字 getInt
達(dá)夢(mèng)實(shí)驗(yàn)
tinyint建表測(cè)試
create table test_tinyint_20240911(a1 tinyint(1),name varchar(20)); --報(bào)錯(cuò)
create table test_tinyint_20240911(a1 tinyint,name varchar(20));insert into test_tinyint_20240911 values(100,'test100');
insert into test_tinyint_20240911 values(133,'test100');
tinyint jdbc返回值類型
- tinyint 插入boolean返回?cái)?shù)字 getObject
- tinyint 插入數(shù)字返回?cái)?shù)字 getObject
- bit 插入boolean 返回boolean getObject
- bit 插入boolean 返回?cái)?shù)字 getInt
- bit 插入數(shù)字 返回boolean getBoolean
測(cè)試結(jié)論
測(cè)試截圖比較亂,但是可以看到當(dāng)mysql 通過getObject 接口獲取數(shù)據(jù)時(shí),會(huì)將大于0 的數(shù)字返回為true;而這種情況是因?yàn)閙ysql的默認(rèn)jdbc連接參數(shù) tinyInt1isBit=true導(dǎo)致的,當(dāng) tinyint(1)時(shí)通過getObject 獲取出的數(shù)據(jù)為boolean
對(duì)比達(dá)夢(mèng)的測(cè)試結(jié)果getObject 獲取的值中,數(shù)據(jù)庫(kù)類型為bit時(shí)返回boolean類型,數(shù)據(jù)庫(kù)類型為tinyint時(shí)返回值類型為int 數(shù)字,當(dāng)然也可以使用隱式方式將返回結(jié)果轉(zhuǎn)變?yōu)閿?shù)字或者boolean類型
對(duì)于使用數(shù)據(jù)庫(kù)過程中,個(gè)人傾向于“O式用法”即要類型一致,boolean就用bit類型存儲(chǔ),時(shí)間類型用timestamp 而非字符串;但是實(shí)際的使用過程中因?yàn)楦鞣N原因,僅關(guān)注這個(gè)模塊是否可以跑起來,跑起來就完事大全,這樣看似省事,但其實(shí)隱藏了其他的問題
對(duì)于數(shù)據(jù)庫(kù)來說,從數(shù)據(jù)庫(kù)中讀寫數(shù)據(jù)往往涉及到類型轉(zhuǎn)換,那么數(shù)據(jù)庫(kù)是怎么在驅(qū)動(dòng)層制定類型轉(zhuǎn)換的規(guī)則,又如何在驅(qū)動(dòng)層完成類型的校驗(yàn)。待我有空 我再去研究研究
參考鏈接
https://dev.mysql.com/doc/connector-j/en/connector-j-connp-props-result-sets.html#cj-conn-prop_tinyInt1isBit
https://dev.mysql.com/doc/connector-j/en/connector-j-reference-type-conversions.html
https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html
https://eco.dameng.com/document/dm/zh-cn/pm/dm_sql-introduction.html#1.4.1%20%E5%B8%B8%E8%A7%84%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B