MySql數據庫字段排序規則不一致產生的一個問題


最近項目向MySql遷移,遷移完畢后,在獲取用戶權限時產生了一個異常,跟蹤進去獲取執行的語句如下,

 SELECT PermissionId   FROM spysxtPermission  WHERE (ResourceCategory = 'BaseUser'      
  AND ResourceId =  '003bf4bd072243fa90517ee2bc088cb7'       AND Enabled = 1        
 AND DeletionStateCode = 0)  UNION  SELECT PermissionId   FROM spysxtPermission        , ( SELECT RoleId   FROM spysxtUserRole 
 WHERE (UserId =  '003bf4bd072243fa90517ee2bc088cb7'        AND Enabled = 1         AND DeletionStateCode = 0 )  UNION SELECT RoleId   
FROM BaseUserRole  WHERE ( UserId =  '003bf4bd072243fa90517ee2bc088cb7'        AND Enabled = 1         AND DeletionStateCode = 0 ) ) B  
  WHERE ResourceCategory =  'spysxtRole'       
AND spysxtPermission.ResourceId = B.RoleId        AND spysxtPermission.Enabled = 1    
     AND spysxtPermission.DeletionStateCode = 0 

在Navicate執行,提示如下:

這個語句在Oracle中執行都是正常的,一時不知道是什么原因,baidu了也沒找到如何處理,我將語句逐個拆開執行,最終找到問題出在這里:

 SELECT RoleId   FROM spysxtUserRole 
 WHERE (UserId =  '003bf4bd072243fa90517ee2bc088cb7' AND Enabled = 1 AND DeletionStateCode = 0 )  
UNION SELECT RoleId FROM BaseUserRole WHERE ( UserId = '003bf4bd072243fa90517ee2bc088cb7' AND Enabled = 1 AND DeletionStateCode = 0 )

看到這里,我突然想到有可能是字符集不一樣造成的,打開表

 

原來問題出在排序規則上,一個是utf8_unicode_ci,一個是utf8_danish_ci。全部改為utf8_unicode_ci。問題解決!

原以為是代碼bug,一直在調試代碼,沒想到問題出在這里。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM