Mysql使用null执行。。。?

Mysql使用null执行。。。?,mysql,prepared-statement,sql-null,Mysql,Prepared Statement,Sql Null,有没有办法在mysql中设置一个变量,使其等于NULL 我正在尝试编写一个系统,用于管理多个连接池上的持久准备语句。我直接在数据库上进行准备/设置/执行。例如: PREPARE test FROM 'SELECT * FROM users WHERE email=?'; SET @email='me@me.com'; EXECUTE test USING @email; 问题是,如果设置@email=NULL,它将不会拾取电子邮件为NULL的行。为此,您必须使用操作符。问题是,此语句仅适用于等

有没有办法在mysql中设置一个变量,使其等于NULL

我正在尝试编写一个系统,用于管理多个连接池上的持久准备语句。我直接在数据库上进行准备/设置/执行。例如:

PREPARE test FROM 'SELECT * FROM users WHERE email=?';
SET @email='me@me.com';
EXECUTE test USING @email;
问题是,如果设置
@email=NULL
,它将不会拾取电子邮件为NULL的行。为此,您必须使用
操作符。问题是,此语句仅适用于等式,不能使用空安全运算符:

PREPARE test FROM 'UPDATE users SET email=?';
换句话说,我需要一种方法来始终在混合准备语句中使用
=
或始终使用
,这些语句可能包括select/where、update/set等,以便我可以将值NULL自由绑定到任何参数。。。理想情况下,如果null(或NOTNULL)可能最终被绑定,则不要求使用者始终在其WHERE中使用null安全等式

所以我想我的问题是如何定义一个变量,使它等于NULL,或者不等于NULL,在没有NULL安全运算符的情况下,可以在比较中使用。这在Mysql中可能吗

编辑:
我要补充的是,到目前为止,我唯一能绕过这个问题的方法是尝试分析我在语句中的位置,找出我是在where后面还是在SET后面,并在前一个实例中将=替换为。这看起来很疯狂,因为我想做的事…

如果你还有其他的要点要补充,把它们放在问题中,而不是评论中。你可以使用
其中(?为NULL,电子邮件为NULL)或者email=?
没有办法回避这样一个事实,
NULL
是一个特殊值,不能用
=
进行测试。除非您想编写一个SQL解析器,可以找出哪些
=
处于比较中,哪些处于赋值中,您必须咬紧牙关,告诉用户在比较中使用
。@Barmar说了一个显而易见的事实:您不能使用=进行空安全比较。不管是好是坏,mysql为此实现了一个单独的操作符。您的用户编写了不正确的sql语句(或不完全符合其要求的语句),然后由他们来更正。