專案問題總結2:GUID區分大小寫嗎?
問題描述:
最近在做專案的過程中,遇到一個問題,將從基礎系統查詢出來的課程ID作為引數去考評系統裡查詢考試資訊,卻什麼也查不出來,除錯了半天不知道什麼原因。
問題分析:
靜下心來思考一下,可以肯定程式程式碼邏輯以及實現是沒有問題的,因此就是資料的問題了。那麼資料出問題就應該是資料庫的問題了,在進行單步除錯的過程中,去檢查各個變數以及引數的值,終於找到了問題出在哪裡,先來看看兩個系統的資料庫儲存CourseId的資料型別是什麼吧,如下圖:
上圖中左邊是基礎的,右邊是考試的。再來看看我的程式碼是如何實現問題描述裡所說的過程吧:
想著想著就意識到一個問題,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位的數字識別符號,那麼也許會很快的找到問題出在哪裡。
相關文章
- 模糊查詢區分大小寫嗎?
- python中不區分大小寫嗎Python
- vue專案問題總結Vue
- MySQL的where條件字串區分大小寫的問題MySql字串
- Git 區分大小寫Git
- 密碼區分大小寫密碼
- oracle 不區分大小寫Oracle
- mysql查詢欄位內容無法區分大小寫問題MySql
- Oracle 11gR2密碼區分大小寫Oracle密碼
- mongodb如何不區分大小寫MongoDB
- 配置mysql不區分大小寫MySql
- mysql 表明不區分大小寫MySql
- MySQL binary 區分大小寫MySql
- MySQL表名區分大小寫MySql
- 查詢區分大小寫 (轉)
- 【11gR2新特性】密碼區分大小寫密碼
- vue專案中遇到的問題總結Vue
- uniapp專案所遇問題總結APP
- MySQL大小寫問題MySql
- MySQL不區分大小寫設定MySql
- Nginx支援url不區分大小寫Nginx
- java ArrayList排序不區分大小寫Java排序
- vim 查詢不區分大小寫
- Oracle靜態監聽中SID_NAME區分大小寫嗎?Oracle
- 專案總結(幾大未解決問題)
- mysql 大小寫敏感問題MySql
- 專案中遇到的RediS快取問題及面試問題總結Redis快取面試
- Sql Server 強制大小寫區分方法SQLServer
- 設定MYSQL不區分表大小寫MySql
- 使MySQL查詢區分大小寫(轉)MySql
- 大型電子政務專案問題總結薦
- ocfs2檔案系統問題總結(zt)
- Mysql 表名大小寫問題MySql
- mysql大小寫問題解決MySql
- PHP大小寫是否敏感問題PHP
- 配置CaseInsensitiveMap使key不區分大小寫
- MySQL模糊查詢(like)時區分大小寫MySql
- 更改MYSQL資料庫不區分大小寫MySql資料庫