Mysql 函数在不同的服务器上区分大小写

Mysql 函数在不同的服务器上区分大小写,mysql,regex,configuration,collation,case-sensitive,Mysql,Regex,Configuration,Collation,Case Sensitive,我在mysql中创建了以下函数: DELIMITER $$ CREATE FUNCTION fn_header_uploader_address(v_add varchar(500)) RETURNS bigint(20) begin DECLARE v_error bigint default 0; IF length(v_add) > 100 then set v_error = 110; elseif v_add is null or v_add

我在mysql中创建了以下函数:

DELIMITER $$
CREATE FUNCTION fn_header_uploader_address(v_add varchar(500)) RETURNS bigint(20)
begin
DECLARE v_error bigint default 0;

    IF length(v_add) > 100 then
        set v_error = 110;  
    elseif v_add is null or v_add ='' then 
        set v_error=110;
    elseif v_add NOT REGEXP '^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$' then
        set v_error=110;
    end if;   
return v_error;

end$$
DELIMITER ;
如果我在local(deterministic/no deterministic子句)上运行它,它将为下面的语句返回零(有效电子邮件):

select fn_header_uploader_address('hello@gmail.com');
但是在将该功能移动到新服务器时,它会区分大小写!! 所以现在

需要帮忙吗

编辑:

我已经使用以下命令比较了服务器:

show collation where collation like '%_c%' ;
show variables like '%version%';
更改:

...
elseif v_add NOT REGEXP '^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$' then
...
或二进制:

...
elseif v_add NOT REGEXP '^[\x41-\x5a\x61-\x7a\x30-\x39\x2e\x2d\x5f\x25]+\x40[\x41-\x5a\x61-\x7a\x30-\x39\x2e\x2d]+\x2e[\x41-\x5a\x61-\x7a]{2,4}$' then
...

你能用
SHOW CHARACTER SET
检查排序规则吗?谢谢你的回复,哈维。我可以用UPPER(v\u add),但我是mysql新手。因此,我想了解为什么我在两台不同的服务器上得到不同的结果。谢谢harvey,即使你的答案解决了我的问题,我也无法将它标记为已回答。我添加了搜索的二进制变体。无论如何,它应该可以工作。谢谢@Ruben。我尝试了你上面提到的正则表达式。但它无法拒绝行以下格式的。即使末尾有“.com”,正则表达式也接受行。选择”tammy@dotcom'not regexp'^[a-zA-Z0-9.\u%-]+@[a-zA-Z0-9.-]+\[a-zA-Z]{2,4}$';我必须尝试在'@'之后的正则表达式中强制使用'dot'
...
elseif v_add NOT REGEXP '^[\x41-\x5a\x61-\x7a\x30-\x39\x2e\x2d\x5f\x25]+\x40[\x41-\x5a\x61-\x7a\x30-\x39\x2e\x2d]+\x2e[\x41-\x5a\x61-\x7a]{2,4}$' then
...