mysqlprocedure在localhost上出现了奇怪的错误

时间:2016-05-04 03:51:17

标签: php mysql stored-procedures character-encoding

我试图使用一个程序来更改我的mysql数据库的字符集。

几年前我写过这篇文章并且直到今天都没有回复它。

由此我犯了一个奇怪的错误:

以下是我的程序:

Create procedure changecharset()
Begin
Declare tname varchar(255);
Declare done int default 0;
Declare tc Cursor For
Select TABLE_NAME From information_schema.TABLES Where TABLE_SCHEMA = schema();
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

Open tc;
myloop: loop
Fetch tc into tname;
If done = 1 Then
Leave myloop;
End if ;
Set @query = Concat('Alter Table `', tname, '` convert to character set utf8 collate utf8_swedish_ci;');
PREPARE alterstmt FROM @query; 
execute alterstmt ;
Deallocate prepare alterstmt;
End loop;

close tc;
End //

Delimiter ;
[/sql]

这是mysql服务器的答案

  

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法

     

near''在第3行

非常感谢Anykind的帮助

1 个答案:

答案 0 :(得分:2)

看起来MySQL正在将分号视为声明的结尾。

确保在运行CREATE PROCEDURE语句之前更改分隔符。

DELIMITER $$

CREATE PROCEDURE foo()
BEGIN
   DECLARE ... ; 
   SET ... ;
END $$

DELIMITER ;