首页 > 解决方案 > SQL / mariaDB:IF由于排序规则而不起作用?

问题描述

让我先说一下我的问题,我的老师盯着我的代码看了 2 小时,只能猜测它可能是排序规则。

问题是:在一个练习中,我们被要求创建一个电影数据库,然后编写几个程序。一个过程应该执行以下操作: - 获取电影的 id(作为参数)、导演的姓氏和名字,然后测试导演是否已经在表中。如果答案是否定的,则将该名称添加到表中。无论哪种方式,该过程都会将电影 ID 和导演的 ID 添加到第二个表中。这是我的代码:

delimiter //
create or replace procedure p_director 
( par_movieID integer, par_firstName varchar(50),par_lastName varchar(100))
BEGIN 
DECLARE var_id  INTEGER; 
DECLARE var_firstName  varchar(100);
DECLARE var_lastName   varchar(100);
DECLARE var_control integer;
DECLARE exit handler for SQLEXCEPTION
Begin
rollback; 
End; 
Start TRANSACTION;

set var_firstName = par_firstName;
set var_lastName =  par_lastName; 

SELECT directorID FROM director 
where lastName = var_lastName AND firstName = var_firstName 
INTO var_control; 

select var_control as debug; 

IF (var_control IS NULL) THEN

select max(directorID)+1 from director into var_id; 

insert into director ( directorid, firstName, lastName) 
values (var_id, par_firstName, par_lastName); 

insert into moviedirector (movieID, directorID) values 
( par_movieID ,var_id) ; 

ELSE 

insert into moviedirector (movieID, directorID) 
values ( par_movieID ,var_control); 

END IF;  
END// 
delimiter ;

如您所见,我添加了“选择 var_control 作为调试;”行。我这样做是为了获取屏幕上显示的变量的值。反正。这段代码应该运行良好。我知道这一点,因为我编写了一个例程,它为家庭作业做了完全相同的事情。对于该数据库,它可以工作。但是,如果我在 MariaDB 下运行此过程,它就不起作用。尽管没有语法错误,但从未到达 else 和 end if 之间的语句,甚至更奇怪的是,“select var_control as debug;” 语句在屏幕上不生成任何输出,甚至不为空!

正如我所说,我的老师盯着它看了 2 个小时,最后他发现我的作业中的代码和这个练习之间的唯一区别:数据库的排序规则和字符集: 对于我的家庭作业,我使用排序规则 latin1_swedish_ci,在学校,我们使用 utf8_general_ci。

这可能是原因吗?整理真的能产生如此深远的影响吗?你们中有人遇到过这种问题吗?

标签: sqlmariadbcollation

解决方案


推荐阅读