wordpress 推薦 配置寧波核心關(guān)鍵詞seo收費
測試環(huán)境 mysql5.7.44
達夢2024Q2季度版
前言
在mysql 中存在 tinyint(1)的用法來實現(xiàn)存儲0 1 作為boolean的標(biāo)識列;但是在達夢并不允許使用 tinyint(1)來定義列,只能使用 tinyint 即 取值范圍為:-128 ~ +127;實際上mysql 使用tinyint(1)定義列,取值范圍仍為-128 ~ +127,并非 {0, 1} ;但是在mysql 中當(dāng) tinyint存儲為0 1 時,jdbc 使用getObjecct獲取改列的值類型為boolean,并非數(shù)字,這又是怎么回事呢。先說答案,為了在達夢JDBC獲取到boolean類型需要在數(shù)據(jù)庫中將對應(yīng)列改為bit 類型。
分析
mysql實驗
tinyint取值范圍
插入數(shù)據(jù)驗證mysql 的 tinyint(1)的存儲范圍是否為 {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');
在我的測試環(huán)境中mysql 將超出的列值自動進行了截斷,取了取值上限
那么,可以證明的 tinyint(1)的存儲范圍不為 {0, 1}
tinyint jdbc返回值類型
- 插入boolean 返回boolean getBoolean
- 插入數(shù)字返回布爾 getObject
- 插入數(shù)字返回數(shù)字 getObject
- 插入數(shù)字返回數(shù)字 getInt
- 定義tinyint(13)插入數(shù)字返回數(shù)字 getInt
達夢實驗
tinyint建表測試
create table test_tinyint_20240911(a1 tinyint(1),name varchar(20)); --報錯
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返回數(shù)字 getObject
- tinyint 插入數(shù)字返回數(shù)字 getObject
- bit 插入boolean 返回boolean getObject
- bit 插入boolean 返回數(shù)字 getInt
- bit 插入數(shù)字 返回boolean getBoolean
測試結(jié)論
測試截圖比較亂,但是可以看到當(dāng)mysql 通過getObject 接口獲取數(shù)據(jù)時,會將大于0 的數(shù)字返回為true;而這種情況是因為mysql的默認jdbc連接參數(shù) tinyInt1isBit=true導(dǎo)致的,當(dāng) tinyint(1)時通過getObject 獲取出的數(shù)據(jù)為boolean
對比達夢的測試結(jié)果getObject 獲取的值中,數(shù)據(jù)庫類型為bit時返回boolean類型,數(shù)據(jù)庫類型為tinyint時返回值類型為int 數(shù)字,當(dāng)然也可以使用隱式方式將返回結(jié)果轉(zhuǎn)變?yōu)閿?shù)字或者boolean類型
對于使用數(shù)據(jù)庫過程中,個人傾向于“O式用法”即要類型一致,boolean就用bit類型存儲,時間類型用timestamp 而非字符串;但是實際的使用過程中因為各種原因,僅關(guān)注這個模塊是否可以跑起來,跑起來就完事大全,這樣看似省事,但其實隱藏了其他的問題
對于數(shù)據(jù)庫來說,從數(shù)據(jù)庫中讀寫數(shù)據(jù)往往涉及到類型轉(zhuǎn)換,那么數(shù)據(jù)庫是怎么在驅(qū)動層制定類型轉(zhuǎn)換的規(guī)則,又如何在驅(qū)動層完成類型的校驗。待我有空 我再去研究研究
參考鏈接
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