我发现了一个无法解释的实例:
当我使用存储的PROCEDURE
时,似乎只会发生这种情况。 之谜是所有字符串都是脚本中的文字,我原本预计它们都拥有相同的整理顺序。关于这个问题有几个问题,但没有一个与我能看到的这类问题有关(我在下面列出了一个列表或者其他找到这个问题的人)。
该脚本使用存储的procedure
来执行简单的标题。这是原始的'设计':
DELIMITER $$$
CREATE PROCEDURE new_script( IN label VARCHAR(50) )
BEGIN
set @SCRIPT_NAME=label;
set @script_count:=@script_count+1;
set @script_error_count:=0;
set @sqlstmt := concat('select \'', @DASHES, '\' as \'', @SCRIPT_NAME, ': starting ...\'');
PREPARE stmt FROM @sqlstmt;
EXECUTE stmt;
DROP PREPARE stmt;
END$$$ -- new_script
DELIMITER ;
concat()
语句失败:
然而 WHEN 我在@SCRIPT_NAME
之外的procedure
进行了分配,并对该行进行了评论:
-- set @SCRIPT_NAME=label;
如图所示,一切正常!例如:
set @SCRIPT_NAME='dummy_script.sql';
call new_script( 'IGNORED dummy_script.sql' );
输出:
+--------------------------------------------------+
| dummy_script.sql: starting ... |
+--------------------------------------------------+
| ---------------------------------------------- |
+--------------------------------------------------+
根据需要。
稍微玩了一下后,我认为问题在于从参数:label
到脚本变量@SCRIPT_NAME
的分配。
label
似乎使用了不同的排序规则。我想要的是如何调用该过程而没有此错误。我不希望在@SCRIPT_NAME
程序之外设置new_script
的值。
或许你有比这些想法更好的方法 - 请分享?
相关 :
答案 0 :(得分:0)
SHOW PROCEDURE ...
当你CREATEd
SP时,你会看到一个字符集/整理。 DROP
SP,SET NAME ...;
并重新CREATE
SP。