通过mysql客户端执行编写好的存储过程时,创建失败。出现如下错误提示,
ERROR 1558 (HY000): Column count
of mysql.proc is wrong. Expected 20, found 16.
Created with MySQL 50020, now running
50524. Please use mysql_upgrade to fix thi
s error.
mysql.proc表的列数应该是20,当前只有16列,缺少4列,请通过mysql_upgrade来修复
原因分析
Mysql客户端是使用的5.5的,mysql数据库文件是直接使用的旧版本的mysql数据库文件,因此mysql.proc表中缺少四列,导致错误。
解决方案:
1、(win下某些集成环境可能没有这两个文件,linux忽略) : 如果你的
(mysql安装目录\bin) 目录下没有 mysql_upgrade.exe和mysqlcheck.exe两个文件,请通过如下方式获取并复制到目录下:
a.请先从mysql官网下载安装相同版本mysql,然后从bin目录中获取这两个文件.(多个mysql冲突问题请自行百度解决)。
b.让朋友发给你。
2、(win下):
先启动mysql;
开始->运行->输入cmd回车,在操作提示符下输入
mysql安装目录\bin\mysql_upgrade -u root -p
(输入你的密码) 然后回车,待运行完之后关闭DOS窗口。
(linux 下):
使用root权限登陆,在终端执行
service mysqld restart (要先启动mysql才能执行升级,不知道你是否已经启动mysql ,所以直接restart了)
mysql_upgrade -u root -p
即可
3、如果执行完成之后末行出现 ok ,恭喜你升级成功。
如果失败,有两种解决方案:
a.暂时移出mysql\data文件中除 mysql以外的文件夹,然后再次尝试第二步
b.一般a就可以解决问题了,只不过b是问题的本质
执行如下sql语句即可
ALTER TABLE mysql.proc
ADD `character_set_client` char(32) CHARACTER SET utf8 COLLATE
utf8_bin DEFAULT NULL,
ADD `collation_connection` char(32) CHARACTER SET utf8 COLLATE
utf8_bin DEFAULT NULL,
ADD `db_collation` char(32) CHARACTER SET utf8 COLLATE utf8_bin
DEFAULT NULL,
ADD `body_utf8` longblob