標籤:
最近項目向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,一直在調試代碼,沒想到問題出在這裡。
MySql資料庫欄位定序不一致產生的一個問題