因为需要使用国产数据库达梦做项目,所以搭建了达梦的环境。数据库安装和创建实例就不多说了。在导入别人给的dmp文件的时候,遇到了编码不一致的问题。
(先贴问题图片让大家快速确定是不是和我一样的问题)
其他文章要么是说linux环境导入,要么就是windows环境但让你改本地字符集。都没办法解决我的问题,要么代价太大。
先看看我遇到的问题过程。
首先我安装并创建了实例。我拷贝了一份dmp文件。
然后打开DM管理工具。用SYSDBA去创建一个用户,用户名应该和导出时的一致。如果你不知道导出时的用户名,可以先随便取一个。
例如我创建一个DM10
用户的权限之类的可以先不设置,需要的后面再修改就行了。
然后刷新模式。
模式中就会出现DM10了。然后右键选择导入。(如果导入和导出都是灰的,请多刷新或者重启DM管理工具)。
选择导入目录和导入文件之后,点击确定,然后问题就来了。
这个错误原因是因为我们windows是GBK编码,但达梦导出的一般都是GB18030(因为创建实例的时候选的18030,如果创建实例时只有GBK没有18030,可以先把windows改成UTF-8,具体方法不描述了,自行百度),所以这里直接中断了。
我百度了很多文章,要么是解决Linux环境的,要么得改windows为18030。两个方式我都不想,所以我尝试从CMD命令窗口直接导入。
首先到达梦的安装目录的bin目录下,然后输入导入命令(具体命令自行百度,我这里演示简单的)。
上图可以看到,虽然还是提示编码不一致,但是继续执行下去了。警告是因为导出用户的DM74,而导入却用DM10,所以后面最终会导入失败。这时候我们根据警告再建一个DM76用户就行了。
下面是我关闭服务然后删除实例后,重新创建的实例和用户进行的导入。
我直接在DM管理工具尝试了,可以直接导入,之前的终止是因为用户名的问题,DM管理工具没有具体的提示错误。
总结:并不是字符集不同导致DM管理工具无法直接导入,只是因为DM管理工具没有详细的提示错误,所以显得字符集是直接原因,使用命令符导入方式可以获得错误提示,更好解决导入失败的问题。