code: func (b *builtinFromBase64Sig) evalString(row chunk.Row) (string, bool, error) {
  	str, isNull, err := b.args[0].EvalString(b.ctx, row)
  	if isNull || err != nil {
  		return "", true, err
  	}
  
  	needDecodeLen := base64NeededDecodedLength(len(str))
  	if needDecodeLen == -1 {
  		return "", true, nil
  	}
  	if needDecodeLen > int(b.maxAllowedPacket) {
  		b.ctx.GetSessionVars().StmtCtx.AppendWarning(errWarnAllowedPacketOverflowed.GenWithStackByArgs("from_base64", b.maxAllowedPacket))
  		return "", true, nil
  	}
  
  	str = strings.Replace(str, "\t", "", -1)
  	str = strings.Replace(str, " ", "", -1)
  	result, err := base64.StdEncoding.DecodeString(str)
  	if err != nil {
  		// When error happens, take `from_base64("asc")` as an example, we should return NULL.
  		return "", true, nil
  	}
  	return string(result), false, nil
  }
docs: // evalString evals FROM_BASE64(str).
  // See https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_from-base64