MySQL规范-列名大小写敏感与别名大小写敏感
正常来说,mysql是列名大小写不敏感的,我们不能同时设置一个id字段和一个iD字段。默认情况下设置除大小写外都相同的字段是不允许的。
但是,我们可以通过取别名的方法将两个不同字段映射成同一个name
例如:
SELECT id ID, user_id ID FROM user;
上述SQL是可以正常工作的。
返回数据是 ID:179,id(1):0051。
但是如果我们将sql改成下面
SELECT id ID, user_id Id FROM user;
上述SQL其实也可以正常工作,返回的数据是 ID:179,Id:0051。这里其实navicat就已经出现问题了,返回的结果集中,显示的是ID是int类型(显示在左侧),而Id则变成了char类型(显示在右侧)这时数值还是正确的,神奇的是,如果使用navicat中的insert语句,Id又自动变成了int类型。
但是在Java中就出现了灾难:ID:179,Id:null。
为什么?
因为JDBC获取别名冲突(大小写不敏感),导致后续无法获取正常值,deepseek给的解释是:在存储映射时,Id和ID会规范化转为同一个键id,这时后处理的键会覆盖先处理的键,导致其中一个列的数据丢失,这时再通过别名访问就会返回null。

浙公网安备 33010602011771号