【发布时间】:2012-12-13 17:11:28
【问题描述】:
我有以下存储过程(取自http://dev.mysql.com/doc/refman/5.0/en/create-index.html 的评论,用于检查表上是否存在索引):
DELIMITER $$
DROP PROCEDURE IF EXISTS `create_index_if_not_exists`$$
CREATE DEFINER=`user`@`%` PROCEDURE `create_index_if_not_exists`(table_name_vc varchar(50), index_name_vc varchar(50), field_list_vc varchar(200))
SQL SECURITY INVOKER
BEGIN
set @Index_cnt = (
select count(1) cnt
FROM INFORMATION_SCHEMA.STATISTICS
WHERE table_name = table_name_vc
and index_name = index_name_vc
);
IF ifnull(@Index_cnt,0) = 0 THEN set @index_sql = concat('Alter table ',table_name_vc,' ADD INDEX ',index_name_vc,'(',field_list_vc,');');
PREPARE stmt FROM @index_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END$$
DELIMITER ;
奇怪的是,它在 CentOS 5.4 和 MySQL 5.5.25 上完美运行,但在 Mac OS X 10.8.1 和 MySQL 5.5.24 上不工作。在 Mac 上,如果我添加,@Index_cnt 始终为 0
select @Index_cnt
在存储过程中。如果我自己执行SELECT COUNT(1) cnt ... 语句,则返回应为的 1 或 0。
有什么想法吗?
【问题讨论】:
-
你确定CentOS和OSX下底层数据是一样的吗?
-
这可能与 CentOS 中的文件系统区分大小写有关,而 OSX 则不是(秘密)?
-
@trojanfoe 是的,我确定
-
@wkoot 我刚刚测试过,它在 Windows 中也不起作用。不知道这有助于诊断问题吗?
-
Windows 也是不敏感的。你能检查另一个 unix 发行版吗?也许是一个 ubuntu 虚拟机