如果你已经对datasource、database和schema有清晰的认知了(虽然我认为这样的人都不会打开这篇博文了)
那您可以离开本页了,不想浪费您的时间~
像我这么的人一般能百度到的东西都不会拿出来写...
但是这次我研究的这个事儿,应该是全网无人总结的(问题的表象无人说,问题的本质当然是有大佬解释的啦,看下去就知道我在说啥了~)
背景描述:
今天在看别人的servlet代码的时候突然发现
![]()
这个东西应该是数据库名吧,咦我怎么记得我在DG里默认的数据库里没有这个东西呢?打开DG一看,果然

但是我连接过其他的项目的数据库,是有这个东西的,那个时候没深究。
于是我就去请教我的小伙伴(他用的是navicat),他说Database就是数据库的名字啊,于是他给我演示了一下在navicat上新建一个数据库的操作……
但是我回来找类似create/new database的操作,愣是没找到,我还百度了好久,没有能解决我疑惑的
我还实验性地这样做:

测试连接直接红了,说明没找到这个数据库。(说明了两个问题,第一这不是新建数据库的操作!第二本地没有这个数据库!)
第二点好理解,确实没有这个数据库,因为我本来就是想要通过这个方法来创建它。
第一点就很疑惑了,如果我把database去掉,是可以新建一个schema(注意我的用词不是数据库)的,但是这也不是新建数据库啊
让我来总结一下我的问题。
DG项目结构如下:
在我的理解里,
1:DG项目创建的一个数据库连接,看到的MySQL-@localhost 是连接的名称
2:概念模糊,应该是个集合一样的东西
3:集合里的实体对象,创建的时候也是new schema
4:很明显这就是表啊
而就是我对schema的理解不够到位,而引发了我所有的疑惑和不解
对1和4的理解是肯定没有问题的,于是我去搜了一下schema的概念,参考如下(百度第一条)
https://blog.youkuaiyun.com/u010429286/article/details/79022484
原来在MySQL里,schema和我们说的数据库(database)是差不多一样的概念,也就是说我们新建schema就是新建数据库(database),也就是说2是数据库的集合结构,3就是数据库本身
于是我打开本地mysql server,show databases一下:

我再到DG中,创建一个新的连接如下:
红字是时区错误!说明不是database没找到!
我们改一下时区,新增一条serverTimezone即可

再测试一下:

奈斯 兄嘚!
让我们打开来看一下:

连接到了我本地的web_cms数据库,没毛病
然后看到上面的 1 of 7 我就豁然开朗了,这玩意儿用于调节DG中展示的视图,你可以选择你想看哪几个数据库

这说明了一个问题,这个连接虽然指定了连接的database,但是我们用的是root账号,所以可以看所有的数据库,这个所有指的是localhost:3306下的即我们这个数据库服务下的所有数据库!
总结:
总算明白了DG的构造,让我拿上面那个图再来总结一下

1:连接
2:该连接下,你能访问的数据库们
3:一个数据库
4:数据表
我们创建的连接是对应一个数据库服务的,而这个连接我认为应该称之为 数据源 以防跟数据库混淆。
其实在DG中已经做了提示了,


我们这样创建的就是数据源,在连接成功后我们可以在Schemas选项中选择我们要连接的数据库,
所以我觉得database这个选框其实没什么必要?毕竟连接前可以在Schemas中选择,连接后又可以使用视图来屏蔽/展示……
还是说除了root账户都需要通过指定database的方式来连接呢?这个问题没有测试,有兴趣的小伙伴可以去试试!
再回头看本文最开始提出的疑惑,为什么打开本地数据源的连接属性里,没有database这个属性呢。因为这是数据源啊!又不是数据库!再问头都打烂掉!你看到别的有这个属性的,因为它们都是针对某个特定数据库连接!
如果要创建数据库,就new schema!

本文探讨了在DataGrip中遇到的关于数据库、schema和数据源的困惑。作者指出,DataGrip中的MySQL-@localhost是连接名称,schema在MySQL中与数据库相似。在解决问题的过程中,作者发现database字段在新建连接时并非用于新建数据库,而是用于指定已存在的数据库。通过调整时区解决了连接问题,并明确了DataGrip中的数据源、数据库、schema和表的层级结构。
1533

被折叠的 条评论
为什么被折叠?



