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,一直在调试代码,没想到问题出在这里。
如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击文章下方“推荐”按钮【精神支持】,您的“推荐”将是我最大的写作动力!
欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2015-04-17 获取客户端的IP地址