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

SQL/mariaDB:如果由于排序规则而无法工作?,sql,mariadb,collation,Sql,Mariadb,Collation,让我先说一句,我的老师盯着我的代码看了2个小时,只能猜测它可能是排序规则 问题是:在一个练习中,我们被要求创建一个电影数据库,然后编写几个过程。一个程序应执行以下操作: -以电影的id(作为参数)作为导演的姓和名 然后测试导演是否已经在桌子上了。如果答案为“否”,则会将名称添加到表中。无论哪种方式,该过程都会将电影ID和导演ID添加到第二个表中。这是我的密码: delimiter // create or replace procedure p_director ( par_movieID i

让我先说一句,我的老师盯着我的代码看了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 ;
如您所见,我添加了一行“selectvar_controlasdebug;”。我这样做是为了得到屏幕上显示的变量值。无论如何这段代码应该运行良好。我知道这一点,因为我写了一个例行程序,对家庭作业做了完全相同的事情。对于那个数据库,它是有效的。 但是,如果我在MariaDB上运行此过程,它将不起作用。尽管没有语法错误,else和end if之间的语句永远不会到达,更奇怪的是,“select var_control as debug;”语句在屏幕上不生成任何输出,甚至不生成null

正如我所说,我的老师盯着它看了整整两个小时,最后他发现了我作业中的代码和这个练习之间的唯一区别:数据库的排序规则和字符集:在我的作业中,我使用了排序规则拉丁1_瑞典语_ci,而在学校我们使用utf8_general_ci


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

可能是简短的回答。该名称是否包含非ascii字符?utf8-general_ci支持的字符范围远远大于latin1_-swedish_ci。事实上,不是。虽然类是德语,但我们不使用非ACII符号。我的家庭作业也一样。我总是把umlaute,比如“ü”或“ä”分别写为“ue”或“ae”。我仍然会检查数据库中已有的数据以及输入。或者只需更改正在使用的排序规则/字符集。如果您无法在此处解决此问题,您可能需要在上询问。谢谢!我会的。