将 UDF 从 MS SQL 服务器移植到 MySQL 会抛出异常不正确的双精度值

Porting a UDF from MS SQL Server to MySQL throws exception incorrect double value

我在 MS SQL Server 2000 数据库上创建了一个函数,可以将 10 进制数转换为 64 进制数,并且可以很好地满足我的需要。我还需要这个函数在 MySQL 数据库中我已经转换它但是它抛出一个异常说

 Truncated double value 'B' 

举个例子,现在如果我将数字保持在 64 以下,它就可以很好地转换。 SQL 函数

CREATE FUNCTION ToBase64(@value int)
RETURNS varchar(50)
AS
BEGIN
DECLARE @seq char(64)
DECLARE @result varchar(50)
DECLARE @digit char(1)

SET @seq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
SET @result = SUBSTRING(@seq, (@value%64)+1, 1)

WHILE @value > 0
BEGIN
    SET @digit = SUBSTRING(@seq, ((@value/64)%64)+1, 1)

    SET @value = @value/64
    IF @value <> 0 SET @result = @digit + @result
END 

RETURN @result
END
GO

mySQL 函数

DELIMITER $$
CREATE FUNCTION ToBase64( Pvalue int) RETURNS varchar(50)
DETERMINISTIC
BEGIN

DECLARE seq char(64);
DECLARE result varchar(50);
DECLARE digit char(1);

SET seq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
SET result = SUBSTRING(seq, (Pvalue%64)+1, 1);

WHILE Pvalue > 0 do

    SET digit = SUBSTRING(seq, ((Pvalue/64)%64)+1, 1);
    SET Pvalue = Pvalue/64;

   IF Pvalue <> 0  THEN
        SET result = digit + result;
    END IF;

End While;

RETURN (result);
END

这可能是你的问题:

IF Pvalue <> 0  THEN
    SET result = digit + result;
END IF;

MySQL 使用 CONCAT() 进行字符串连接:

IF Pvalue <> 0  THEN
    SET result = CONCAT(digit, result);
END IF;