SQL / mariaDB:如果由于排序规则而无法正常工作?

时间:2018-08-13 14:41:10

标签: sql mariadb collation

让我开始提问时要说,我的老师盯着我的代码2小时,只能猜测可能是排序规则。

这是问题所在:在一次练习中,我们被要求创建一个电影数据库,然后编写几个过程。一个过程ist应该执行以下操作: -以电影的ID(作为参数),导演的姓氏和名字作为参数 然后测试导演是否已在表中。如果答案为否,则将名称添加到表中。不管哪种方式,该过程然后将movieID和导演的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之间的语句,甚至更奇怪的是,“选择var_control作为调试”。语句在屏幕上不产生任何输出,甚至不为空!

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

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

0 个答案:

没有答案