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。

posted @ 2026-01-08 16:12  天启A  阅读(1)  评论(0)    收藏  举报