You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0普通用户执行SHOW COLUMNS返回0行的问题求助

问题原因及解决方案

可能原因1:sql_mode中ANSI_QUOTES参数的差异

MySQL的ANSI_QUOTES参数会改变双引号的解析逻辑:

  • 未开启时:双引号被视为字符串,field="type"会匹配Field列值为字符串type的行,这也是root用户能得到正确结果的原因。
  • 开启时:双引号被视为标识符(等同于反引号),field="type"会被解析为比较Field列的值与type列的值,显然没有符合条件的行,因此返回空集。

验证方法

分别以root和view_pjn用户登录MySQL,执行以下命令查看sql_mode:

SELECT @@sql_mode;

如果view_pjn的结果中包含ANSI_QUOTES,而root的结果中没有,即可确认此问题。

解决办法

  • 临时解决:执行语句时改用单引号包裹字符串:
    show columns from Viewing where field='type';
    
  • 永久解决:修改view_pjn用户的默认sql_mode(或全局sql_mode),移除ANSI_QUOTES:
    -- 会话级修改(仅当前登录生效)
    SET sql_mode = REPLACE(@@sql_mode, 'ANSI_QUOTES', '');
    -- 全局级修改(需重启MySQL生效)
    SET GLOBAL sql_mode = REPLACE(@@GLOBAL.sql_mode, 'ANSI_QUOTES', '');
    

可能原因2:表名大小写的权限匹配问题

MySQL权限系统对表名的大小写是严格匹配的(即使文件系统不区分大小写):

  • 你的view_pjn用户被授予的是blog.viewing(小写表名)的权限,但执行语句时使用了Viewing(大写首字母)。
  • root用户因权限极高,可忽略大小写差异找到表,但普通用户的权限检查会严格匹配表名,导致MySQL认为你访问的Viewing不在授权范围内,因此返回空结果。

验证方法

执行小写表名的语句测试:

show columns from viewing where field='type';

如果能返回正确结果,即可确认此问题。

解决办法

  • 统一表名大小写,执行语句时使用与授权一致的小写表名。
  • 若需保留大写表名的使用习惯,重新授予用户对应大小写表名的权限:
    GRANT SELECT, INSERT ON `blog`.`Viewing` TO `view_pjn`@`localhost`;
    FLUSH PRIVILEGES;
    

内容的提问来源于stack exchange,提问作者P. James Norris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:05:33