问题描写叙述:

近期在做项目的过程中,遇到一个问题,将从基础系统查询出来的课程ID作为參数去考评系统里查询考试信息,却什么也查不出来,调试了半天不知道什么原因。


问题分析:
静下心来思考一下,能够肯定程序代码逻辑以及实现是没有问题的,因此就是数据的问题了。那么数据出问题就应该是数据库的问题了,在进行单步调试的过程中。去检查各个变量以及參数的值,最终找到了问题出在哪里。先来看看两个系统的数据库存储CourseId的数据类型是什么吧,例如以下图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGlhbmppYW5nd2Vp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="362" height="143" alt="">

上图中左边是基础的。右边是考试的。再来看看我的代码是怎样实现问题描写叙述里所说的过程吧:


想着想着就意识到一个问题。GUID是什么鬼??
于是百度了 一下:全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。

GUID是一种由算法生成的二进制长度为128位的数字标识符。

GUID主要用于在拥有多个节点、多台计算机的网络或系统中。在理想情况下。不论什么计算机和计算机集群都不会生成两个同样的GUID。

GUID
的总数达到了2^128(3.4×10^38)个,所以随机生成两个同样GUID的可能性很小,但并不为0。

GUID一词有时也专指微软对UUID标准的实现。

人家是数字标识符好不好。区分什么大写和小写啊。唉,读书少啊!不信,我们能够使用代码进行验证:
            //验证GUID是否区分大写和小写
Guid g1 = new Guid("6d025d37-a957-44b1-9e25-50d6bfd57a39");
Guid g2 = new Guid("6D025D37-A957-44B1-9E25-50D6BFD57A39");
Console.WriteLine(g1.Equals(g2)); // 返回true
Console.WriteLine(Object.ReferenceEquals(g1, g2)); // 返回false //使用tostring函数将GUID转换为string类型。观察他们的值
string strg1 = g1.ToString();
string strg2 = g2.ToString();
Console .WriteLine (strg1.Equals (strg2 )); //返回true
Console.WriteLine(strg1);
Console.WriteLine(strg2);
//可是假设你的数据库存储类型为varchar,那就不一样了
string str1 = "6d025d37-a957-44b1-9e25-50d6bfd57a39";
string str2 = "6D025D37-A957-44B1-9E25-50D6BFD57A39";
Console.WriteLine(str1.Equals(str2)); //返回false
Console.Read();
而前面提到的uniqueidentifier,则是GUID在数据库里的存储类型。他们事实上是一个东西。如此一来,就明朗了很多。

问题解决:
办法有两个:一个是让两者的数据库的数据类型保持一致,这是根本上的解决之道。假设不想改动数据库的话,能够接着使用varchar的数据类型去存储GUID的字符串,可是要保证其必须是字母小写的格式。否则在依据其字段值进行查询的时候,字符串是无法和guid的ToString()方法产生的字符串进行匹配的。因此查询结果肯定不对。建议还是统一数据类型吧。

小结 一下:
事实上细致想想还是基础性的东西不扎实,我根本不知道GUID的概念,因此才会有标题所述的疑问。假设我清楚的知道GUID是一种由算法生成的二进制长度为128位的数字标识符,那么或许会非常快的找到问题出在哪里。

项目问题总结2:GUID区分大写和小写吗?的更多相关文章

  1. MySQL查询时强制区分大写和小写

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zyb_icanplay7/article/details/24981791 平时非常少会考虑数据存储 ...

  2. Linux下设置MySQL不区分大写和小写

            MySQL在Linux下数据库名.表名.列名.别名大写和小写规则:  1.数据库名与表名是严格区分大写和小写  2.表的别名是严格区分大写和小写  3.列名与列的别名在全部的情况下均是 ...

  3. ThinkPHP3.2 新bug ReadHtmlCache 支持不区分大写和小写的函数

    报错提示: Fatal error: Function name must be a string in D:\wwwroot\zbphp.com\ThinkPHP\Library\Behavior\ ...

  4. StirngUtil工具类 之 邮箱注冊 域名不区分大写和小写方法

    /** * 传入邮箱域名所有变为小写,然后拼接前缀返回 *<b>Summary: </b> * emailDomainTransform() * @param domain * ...

  5. 怎样设置mysql的表不区分你大写和小写

    Linux上安装MySQL默认是数据库的表大写和小写敏感的.改动非常easy.仅仅要该一个mysql的配置文件就能够了. mysql> show tables; +--------------- ...

  6. mysql大写和小写问题

    曾经做企业项目的时候,用的都是oracle数据库,在新公司项目用的是mysql,有关mysql大写和小写的问题 1   windows下默认mysql是不区分大写和小写的,要想让其支持大写和小写.更改 ...

  7. vim忽略大写和小写查找配置

    作者:zhanhailiang 日期:2014-12-17 默认 vim 的查找是区分大写和小写,可通过下面两种方式实现忽略大写和小写查找 set ic? noignorecase 1 指令设定: : ...

  8. 无法识别的属性“targetFramework”。请注意,属性名是大写和小写。错误的解决方案

    "/CRM"应用server错. 配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查以下的特定错误具体信息并适当地改动配置文件. 分析器错误消息: 无法识别的属性 ...

  9. ORA-01078错误举例:SID的大写和小写错误

    案例重演: dbca建库.SID:metro    --手工建库时实例名小写的metro ...... [oracle@org54 ~]$ export ORACLE_SID=METRO        ...

随机推荐

  1. Windows phone UI虚拟化和数据虚拟化(二)

    书接上回的Windows phone UI虚拟化和数据虚拟化(一)我们学习了wp的ui虚拟化.今天来和大家分享一下wp的数据虚拟化. 并同时感谢我的同事dgwutao在编写此文时给我的巨大帮助,3ks ...

  2. LINQ-进行数据转换

    一.将多个输入联接到一个输出序列中 可以使用 LINQ 查询创建包含元素的输出序列,这些元素来自多个输入序列. 以下示例演示如何组合两个内存中数据结构,但相同的原则可应用于组合来自 XML 或 SQL ...

  3. FineMessBox的js依赖导致错误Uncaught ReferenceError: addEvent is not defined

    /**  * COMMON DHTML FUNCTIONS  * These are handy functions I use all the time.  *  * By Seth Banks ( ...

  4. mysql的row_number()实现

    在mysql中没有row_number()方法,这里模拟row_number()实现: 如有表 studentid   name age   class1 张1 15     12 张2 15     ...

  5. SPOJ QTREE4 Query on a tree IV ——动态点分治

    [题目分析] 同bzoj1095 然后WA掉了. 发现有负权边,只好把rmq的方式改掉. 然后T了. 需要进行底(ka)层(chang)优(shu)化. 然后还是T 下午又交就A了. [代码] #in ...

  6. BZOJ 3990 [SDOI2015]排序 ——搜索

    [题目分析] 可以发现,操作的先后顺序是不影响结果的,那么答案就是n!的和. 可以从小的步骤开始搜索,使得每一个当前最小的块都是上升的数列,然后看看是否可行即可. 复杂度好像是4^n [代码](哪里写 ...

  7. 蜥蜴 BZOJ 1066

    蜥蜴 [问题描述] 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴可以跳到平面距 ...

  8. hdu 5691 Sitting in Line

    传送门 Sitting in Line Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/O ...

  9. 某考试 T2 sum

    为什么其他人都是插值套插值啊,,,,就我是XJB做的吗2333 k次多项式的前缀和可以表示成k+1次多项式,用两次这个玩意就可以发现g可以表示成一个k+2次多项式. 然后我的做法是把g用拉格朗日插值+ ...

  10. 动态规划—最长回文子串LEETCODE第5题深度剖析

    动态规划对于笔者来说有很重要的意义 一.题目如下: 对于此类题目,笔者常用的的办法是先做个暴力解题思路,然后再对暴力法进行优化. 二.暴力法 //字串遍历 public static String l ...