SQL Server GUID 数据迁移至MongoDB后怎样查看?
关键字:SQL Server NEWID();BSON;MongoDB UUID
1.遇到的问题和困惑
SQL Server中的NEWID数据存储到MongoDB中会是什么样子呢?发现不能简单的通过此数据查询了。
例如我们将SQL Server 数据库中的QQStatements2019表迁移至MongoDB 中,集合命名也为QQStatements2019。
在SQL Server中选择4个OrderId,数据作为演示实例,查看如下:

经过程序转换后,在mongodb的客户端工具nosqlbooster上查看。

此时没有文档。
但是查看文档数据量,SQL Server 和 MongoDB 二者一致,说明确实导入成功了。
问题出在哪儿?难得数据失真了?如果是失真的话?是只有这一个字段失真还是全部字段失真?
我们用这些Orderid对应的SerialNumber数据去MongoDB中查询验证下。
现在SQL Server数据库中查看,数据显示如下:

然后去MongoDB查看,此条件查询竟然有数据。

但仔细查看确实失真了,两者显示的不一样。例如:SerialNumber为XX41107960HEZE的Orderid,在SQL Server中是 32C8C3A1-3444-4440-9AE4-9B7631968080,但是在MongoDB中,就变成了如下模样,点击打开又是另外一个样子。

JSON Viewer的界面显示的OrderId数据就是二进制类型。
如上所示,MongoDB查询显示的数据有LUUID(),那我们在每个orderid数据上加上一个LUUID(),是不是就可以查找到了呢?
以SQL Server 的Orderid查看(失真前 32C8C3A1-3444-4440-9AE4-9B7631968080),没有数据。

以MongoDB”失真”后的a1c3c832-4434-4044-9ae4-9b7631968080去查看。
直接查看没有。

加上 LUUID()查看有了。

但验证到这儿,还是不能根据SQL Server 中OrderID 去关联查看 MongoDB中的数据啊!!!
并且仔细查看 32C8C3A1-3444-4440-9AE4-9B7631968080(SQL Server中数据) 和 a1c3c832-4434-4044-9ae4-9b7631968080(MongoDB数据) 相似度很高。后面的几个字节9AE4-9B7631968080 都是一样的。前面的几个字节,也都是在每个段内 以2位为单位重新排列组合。
这看着应该和数据的存储 和类型有关,并且这个变化的只是GUID类型的”失真”了。
回头再比较看看"失真"OrderId和没失真的 SerialNumber在SQL Server 数据库中是怎么定义的。
OrderID在SQL Server数据中的数据类型是 [OrderId] [uniqueidentifier] NOT NULL,而 SerialNumber的类型如下: [SerialNumber] [varchar](50) NULL
现在回头去看看MongoDB存储和SQL Server uniqueidentifier类型相关的知识。争取从这方面找到突破口。
2. MongoDB存储格式和SQL Server uniqueidentifier类型相关的知识
2.1 MongoDB 存储格式
从内部讲,MongoDB以二进制JSON格式存储文档数据或者叫BSON。BSON有相似的数据结构,但是专门为文档存储设计。当查询MongoDB并返回结果时,这些数据就会转换为易于阅读的数据格式。MongoDB Shell使用JavaScript获取JSON格式的文档数据。所有的MongoDB驱动都执行三个主要的功能:首先,生成MongoDB对象ID。默认都存储在所有文档的_id字段里。其次,驱动会把任意语言表示的文档对象转换为BSON或者从BSON转换回来,BSON是MongoDB使用的二进制JSON格式。最后,使用TCP socket与数据库连接通信,此时使用的是MongoDB自定义协议。
所有的文档在发送给MongoDB之前都序列化为BSON格式,以后再从BSON反序列化。驱动库会处理底层的数据类型转换工作。绝大部分驱动都提供了从BSON序列化的简单接口,当读/写文档的时候会自动完成。二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非UTF-8字符保存到数据库中,二进制数据是唯一的方式。
2.2 SQL Server uniqueidentifier类型
uniqueidentifier 全局唯一标识符 (GUID)。
使用 NEWID 函数。
将字符串常量转换为如下形式(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字)。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的 uniqueidentifier 值。
3. 解决小窍门
通过以上知识了解,我们可能定位到数据“失真”应该和 BSON格式和驱动有关,那么可以推测,这个工具(nosqlbooster)应该也有类似的驱动。
皇天不负苦心人,找找就找到了。
如下操作 管理设置图标-->Display Legacy UUID in -->.NET Format

然后,执行点击查看,结果变成了如下格式。

这个MongoDB结果中的数据和SQL Server 中的数据长的比较像了。
此时再次以SQL Server 数据库中的一个OrderId 查看。

此时还是没有数据
添加CSUUID()函数,再次查看有数据了

到此,我们可以松口气了,总算可以,拿到 SQL Server 中的某个Order Id,也可以去转换后的MongoDB查看了。
本文版权归作者所有,未经作者同意不得转载,谢谢配合!!!
SQL Server GUID 数据迁移至MongoDB后怎样查看?的更多相关文章
- 数据库迁移(SQL SERVER导入数据到MySql)
地址:http://blog.csdn.net/jiaohougenyang/article/details/44937801 背景:项目最开始时使用的是SQL Server数据库,业务需求现要将数据 ...
- 《转》SQL Server 2008 数据维护实务
SQL Server 2008 数据维护实务 http://blog.csdn.net/os005/article/details/7739553 http://www.cnblogs.com/xun ...
- 不同版本的SQL Server之间数据导出导入的方法及性能比较
原文:不同版本的SQL Server之间数据导出导入的方法及性能比较 工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论.补充. 0 ...
- SQL Server 变更数据捕获(CDC)监控表数据
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现过程(Realization) 补充说明(Addon) 参考文献(References) ...
- 在SQL Server中将数据导出为XML和Json
有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做 ...
- c#直接调用ssis包实现Sql Server的数据导入功能
调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能.思前想后,决定还是贴一下增强记忆,高手请54. 1.直接调 ...
- SQL Server 将数据导出为XML和Json
有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQ ...
- ORACLE和SQL SERVER的数据同步常用方法
ORACLE和SQL SERVER的数据同步常用方法 1. 自己编程,或者第三方工具2. 在sqlserver中,使用linkedserver,访问oracle,然后编写job进行数据同步3. 在or ...
- sql server导出数据,远程连接失败,需要设置权限
在sql server management中右键当前连接——>方面 在 服务器配置中 将 RemoteAccessEnabled.RemoteDacEnabled设置为TRUE 安全性—— ...
随机推荐
- [Swift]LeetCode875. 爱吃香蕉的珂珂 | Koko Eating Bananas
Koko loves to eat bananas. There are N piles of bananas, the i-th pile has piles[i]bananas. The gu ...
- springboot 实战之一站式开发体验
都说springboot是新形势的主流框架工具,然而我的工作中并没有真正用到springboot: 都说springboot里面并没有什么新技术,不过是组合了现有的组件而已,但是自己却说不出来: 都说 ...
- 关于datagrid中数据条件颜色问题
前天公司考核中做了一个小的考核项目,在考核中一直没找到怎么设置datagrid中数据颜色的代码 他的题目是这样的: 项目资金小于50000时,项目资金数字需要红色文字显示,否则以绿色文字显示 后来找到 ...
- LongAdder 测试
import org.slf4j.Logger;import org.slf4j.LoggerFactory; import java.util.concurrent.CountDownLatch;i ...
- 【Scala篇】--Scala中的函数
一.前述 Scala中的函数还是比较重要的,所以本文章把Scala中可能用到的函数列举如下,并做详细说明. 二.具体函数 1.Scala函数的定义 def fun (a: Int , b: Int ) ...
- 【offer收割机必备】我简历上的Java项目都好low,怎么办?
这篇文章我们来聊一聊,在系统设计和项目经验这两块,应该如何充分的准备,才能拿出有技术含量的项目经验战胜跟你同台竞技的其他工程师,征服你的面试官,收获各种心仪的offer. (1)高级工程师必备:系统设 ...
- C++版 - 剑指offer面试题28: 字符串的排列
题目: 字符串的排列 热度指数:5777 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出 ...
- macOS webview编程
好像是macOS10.10之后,以及iOS8之后,新出现的WKWebview组件就迅速的替代了Webview及UIWebView.后者的确存在一些无法解决的bug,诸如架构导致的速度缓慢和内存泄漏. ...
- Python 中包/模块的 `import` 操作
版权声明:博客为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/10745292.html 用实例来说明 import 的作用吧. 创建 ...
- 阿里注册中心nacos使用整合Dubbo-原创
阿里注册中心nacos是今年开源的框架,一开始以为就是个zk.后面看了图才明白他对标的竟然是consul\eureka,最重要是完美支持dubbo.我想今年开源它也是别有用意 .(目前nacos0.7 ...