code: func (v *typeInferrer) addCastToString(expr ast.ExprNode) ast.ExprNode {
  	if !mysql.IsUTF8Charset(expr.GetType().Charset) {
  		castTp := types.NewFieldType(mysql.TypeString)
  		castTp.Charset, castTp.Collate = types.DefaultCharsetForType(mysql.TypeString)
  		if val, ok := expr.(*ast.ValueExpr); ok {
  			newVal, err := val.Datum.ConvertTo(v.sc, castTp)
  			if err != nil {
  				v.err = errors.Trace(err)
  			}
  			expr.SetDatum(newVal)
  		} else {
  			castFunc := &ast.FuncCastExpr{
  				Expr:         expr,
  				Tp:           castTp,
  				FunctionType: ast.CastFunction,
  			}
  			expr = castFunc
  		}
  		expr.SetType(castTp)
  	}
  	return expr
  }
docs: // AddCastToString adds a cast function to string type if the expr charset is not UTF8.