数据库大小写问题可以说让很多用数据库的人感受是:建表时,哇建出来了;使用时,我去,怎么找不到表,怎么找不到字段。没事,这是小场面。
先说为什么是坑及解决办法
说是坑的原因是:数据库在大小写敏感的配置下创建,如果修改为大小写不敏感后,原来创建的区分大小写的表名就不能访问。
如何避免:所有的库名,表名,字段名使用小写,单词用下划线"_"间隔,所有命名中,不允许使用 反引号,双引号包裹,ODS 层遇到特别骚的,需要提审批。这个规则保你在数据库使用达到 95% 以上的幸福。好了,没时间的同学,读到这里就可以撤了。
这篇文章对于工作中使用到多种类型数据库的朋友有一定的参考及帮助。
发个朋友圈交流时,还有不显事大的,要把双引号,单引号,反引号带上~~~。唉,这些都是泪啊。那么我也看看看不同的数据库,这块有多骚吧!这块如同迷宫,每个数据库都能自圆其说,所以我把 research 的过程列举一下,以供大家参考,研究的对象:Snowflake, Databend, MySQL, PostgreSQL。
每个步骤,我会加上一个例来讲解。
库名和表名的规则一样,这里只用一个表名表示
接下来请看表演
看起来一切完美,按着规则来非常丝滑。 记住一个口诀,可能就会好很多:
整体上说,如果你创建表的时间是什么样,访问的时写成什么样,问题不大。
字段大小写, 不要惊讶,例如(大小写敏感所在要加上双引号或是反引号),如果区分大小敏感:Aa 和 AA 就是不同的字段:
第一个语句可以在 Snowflake , Databend, PostgreSQL 中执行, "Aa" , "AA" 是两个不同的字段。第二个句可以在 Databend 中执行,也是两个独立的字段。
到这里 MySQL 不跟了, MySQL 在字段上不区分大小写。MySQL 字段命名也可以用反引号包裹,但这块规则和表名库名不一致。
在字段大小写一项上, MySQL 有点没骚起来,不支持字段的大小写
Databend
这块 MySQL 玩更风骚了,显示支持大小写,但过滤默认不支持字符型的大小区别(如果需要,请了解一下校验字符集)
看演示:
在 Snowflake, Databend ,PostgreSQL 中可以精确显示出来:
在谈这个问题的时间如果你是一个 MySQL 用户,可能从来都不知道这两个还有啥区别吗?MySQL 中单引号和双引号引起来的字符串都是 string ,在 MySQL 中可以
MySQL 在字段串这块单引号和双引号没区别,随意用。但 MySQL 约定用反引号包裹是表示字段或是关键词。
但是到 Snowflake, Databend, PostgreSQL 中,这块有非常大的区别。
在这个三个数据库中, 双引号包裹的会被自动识别为关键词或字段,单引号包裹的才是字符串。
所以
你能体会到最后一个为什么是正确的,你差不多就 get 到这三个数据库在双引号和单引号的区别了。
好了,看到这里。不知道你是不是学废了。如果为了省事,也可以直接记结论就好。把下面字段命名及使用中的规则写到部门的数据开发规范里
有朋友也许会好奇,为什么还要出现这种反引号,或是双引号包裹的设计呢?全部小写不就行了吗? 和大数据领域的朋友交流一下,主要是为了 ODS 和原数据层对齐,字段中可能出现复杂的字符。
如果你觉得一切都看完了,也可以添加微信:82565387 来感受一下直播中错误及如何实现从大小写敏感切换到大小写不敏感。
本文分享自 MySQLBeginner 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有