php的网站怎么做,软件界面设计工具免费,网站关键词查询网址,宁波 seo整体优化测试环境 mysql5.7.44 达梦2024Q2季度版 前言
在mysql 中存在 tinyint#xff08;1#xff09;的用法来实现存储0 1 作为boolean的标识列#xff1b;但是在达梦并不允许使用 tinyint#xff08;1#xff09;来定义列#xff0c;只能使用 tinyint 即 取值范围为#xff… 测试环境 mysql5.7.44 达梦2024Q2季度版 前言
在mysql 中存在 tinyint1的用法来实现存储0 1 作为boolean的标识列但是在达梦并不允许使用 tinyint1来定义列只能使用 tinyint 即 取值范围为-128 127实际上mysql 使用tinyint1定义列取值范围仍为-128 127并非 {0 1} 但是在mysql 中当 tinyint存储为0 1 时jdbc 使用getObjecct获取改列的值类型为boolean并非数字这又是怎么回事呢。先说答案为了在达梦JDBC获取到boolean类型需要在数据库中将对应列改为bit 类型。
分析
mysql实验
tinyint取值范围
插入数据验证mysql 的 tinyint1的存储范围是否为 {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);在我的测试环境中mysql 将超出的列值自动进行了截断取了取值上限 那么可以证明的 tinyint1的存储范围不为 {0 1}
tinyint jdbc返回值类型
插入boolean 返回boolean getBoolean插入数字返回布尔 getObject 插入数字返回数字 getObject 插入数字返回数字 getInt 定义tinyint(13)插入数字返回数字 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返回数字 getObject tinyint 插入数字返回数字 getObject bit 插入boolean 返回boolean getObject bit 插入boolean 返回数字 getInt bit 插入数字 返回boolean getBoolean 测试结论
测试截图比较乱但是可以看到当mysql 通过getObject 接口获取数据时会将大于0 的数字返回为true而这种情况是因为mysql的默认jdbc连接参数 tinyInt1isBittrue导致的当 tinyint(1)时通过getObject 获取出的数据为boolean 对比达梦的测试结果getObject 获取的值中数据库类型为bit时返回boolean类型数据库类型为tinyint时返回值类型为int 数字当然也可以使用隐式方式将返回结果转变为数字或者boolean类型
对于使用数据库过程中个人倾向于“O式用法”即要类型一致boolean就用bit类型存储时间类型用timestamp 而非字符串但是实际的使用过程中因为各种原因仅关注这个模块是否可以跑起来跑起来就完事大全这样看似省事但其实隐藏了其他的问题
对于数据库来说从数据库中读写数据往往涉及到类型转换那么数据库是怎么在驱动层制定类型转换的规则又如何在驱动层完成类型的校验。待我有空 我再去研究研究
参考链接
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