问题描写叙述:

近期在做项目的过程中,遇到一个问题,将从基础系统查询出来的课程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. jsp jstl标签库 el表达式

    一.JSTL标签是什么? 提供了对国际化(I18N)的支持,它可以根据发出请求的客户端地域的不同来显示不同的语言. 同时还提供了格式化数据和日期的方法.实现这些功能需要I18N格式标签库(I18N-c ...

  2. x86保护模式-六 控制转移

    控制转移可以分为两大类  :同一任务内的控制转移    和   任务间的控制转移(任务切换) 同一个任务内的控制转移可以分为段内转移 .特权级不变的段间转移和特权级改变的段间转移 段内转移与实模式相同 ...

  3. 【LeetCode】String to Integer (atoi)(字符串转换整数 (atoi))

    这道题是LeetCode里的第8道题. 题目要求: 请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...

  4. 【bzoj4826】[Hnoi2017]影魔 单调栈+可持久化线段树

    题目描述 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个灵魂,都有着自己 ...

  5. BZOJ 1072 [SCOI2007]排列perm ——状压DP

    [题目分析] 没什么好说的,水题. 代码比较丑,结果需要开long long 时间爆炸 [代码] #include <cstdio> #include <cstring> #i ...

  6. P1026 统计单词个数 (动态规划)

    题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单 ...

  7. 【JQ同胞遍历】

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. uva 10561 sg定理

    Problem C Treblecross Input: Standard Input Output: Standard Output Time Limit: 4 Seconds Treblecros ...

  9. 洛谷 [P2964] 硬币的游戏

    博弈论+dp 依旧是博弈论的壳子,但问的是最大值,所以要dp 设 dp[i][j] 表示该取 i 号硬币,上一次取了 j 个的先手能取的最大值, 因为每次从小到大枚举复杂度太高,所以我们要从 dp[i ...

  10. 【HDOJ5955】Guessing the Dice Roll(概率DP,AC自动机,高斯消元)

    题意: 有n个人,每个人有一个长为L的由1~6组成的数串,现在扔一个骰子,依次记录扔出的数字,如果当前扔出的最后L个数字与某个人的数串匹配,那么这个人就算获胜,现在问每个人获胜的概率是多少. n,l& ...