Skip to content
Advertisement

Convert VARBINARY to Base64 in MySQL

This seems like a basic scenario, but I can’t find relevant info anywhere.
I’m new to MySQL, coming from years of Microsoft SQL Server experience.

In MySQL, how do you convert a BINARY or VARBINARY value into a Base64 string, and vice-versa?

In Microsoft SQL Server, I’ve been using code like this:

CREATE FUNCTION [dbo].[convert_binary_base64] ( @input [VARBINARY] ( 3000 ) )
RETURNS [VARCHAR] ( 4000 ) AS
BEGIN
    RETURN CAST ( '' AS [XML] ).value ( 'xs:base64Binary(sql:variable("@input"))' , 'VARCHAR(4000)' ) ;
END
GO

According to mysql.com, it looks like the TO_BASE64 function only converts from text to text:
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_to-base64

As with the Microsoft SQL Server example above, is there an XML or JSON operation available in MySQL to perform this action?

Or can I force MySQL to “interpret” a VARBINARY variable as text, and pass the text to TO_BASE64?
(And if so, would that cause a performance degradation?)

Advertisement

Answer

To_BASE64 can also use VARCHAR as base and insert into varchar

DELIMITER //
 
CREATE FUNCTION encodebase64(
    Inputtext 
    VARBINARY(3000)
) RETURNS VARCHAR(4000)
DETERMINISTIC
BEGIN
 Return TO_BASE64(Inputtext);
END //
 
DELIMITER ;

So that

 SELECT encodebase64('text');

returns

# encodebase64('text')
dGV4dA==
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement