SQL/mariaDB:如果由于排序规则而无法工作?
让我先说一句,我的老师盯着我的代码看了2个小时,只能猜测它可能是排序规则 问题是:在一个练习中,我们被要求创建一个电影数据库,然后编写几个过程。一个程序应执行以下操作: -以电影的id(作为参数)作为导演的姓和名 然后测试导演是否已经在桌子上了。如果答案为“否”,则会将名称添加到表中。无论哪种方式,该过程都会将电影ID和导演ID添加到第二个表中。这是我的密码:SQL/mariaDB:如果由于排序规则而无法工作?,sql,mariadb,collation,Sql,Mariadb,Collation,让我先说一句,我的老师盯着我的代码看了2个小时,只能猜测它可能是排序规则 问题是:在一个练习中,我们被要求创建一个电影数据库,然后编写几个过程。一个程序应执行以下操作: -以电影的id(作为参数)作为导演的姓和名 然后测试导演是否已经在桌子上了。如果答案为“否”,则会将名称添加到表中。无论哪种方式,该过程都会将电影ID和导演ID添加到第二个表中。这是我的密码: delimiter // create or replace procedure p_director ( par_movieID i
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”。我仍然会检查数据库中已有的数据以及输入。或者只需更改正在使用的排序规则/字符集。如果您无法在此处解决此问题,您可能需要在上询问。谢谢!我会的。