The output from serialize() should be treated as binary data. TEXT is a character data type, which implies a character set and encoding. So, somewhere between the time you send the string from php, until you get it back, if any conversion happens due to character sets, you get the wrong data back, and most likely serialize() will outright fail because string lengths were probably altered.
It helps because there is character conversion or stripping being performed, and base64 encoding uses a set of characters that tend to pass through unchanged in a lot encodings. Your query might not even be succeeding at all.