sql - 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。
这可能是原因吗?整理真的能产生如此深远的影响吗?你们中有人遇到过这种问题吗?
解决方案
推荐阅读
- javascript - 修改谷歌工作表脚本以复制值而不是公式
- java - Android studio SQLite 不能在数据库表中添加多个字符串
- mysql - MySQL Docker 容器在首次运行后存储密码
- python - 与 nan 相乘时,熊猫是否会产生错误
- android - AppBarLayout.ScrollingViewBehavior - 屏幕底部视图
- javascript - 状态未更新
- powershell - 如何通过 powershell 运行大型 base64 编码文件
- c# - 发送带有请求正文的http get c#
- jquery - 使用 Fullpage.js 当部分可见时我应该使用哪种方法来触发 jquery 动画?
- c# - 无法从 System.Collections.Generic.List 转换
到 System.Collections.Generic.IEnumerable