# 用户定义变量

__*用户变量*__

+ 您可以将值存储在用户定义的变量中,然后在其他 prepared statements 语句中引用该值
+ 用户定义的变量:
  + 以 @ 符号为前缀:`@variable_name`  
  + 使用 SET 语句为其赋值:`SET @variable_name = expr` 
    + 该值必须是 integer, decimal, floating-point, string 或 NULL 类型
+ 只在当前会话可见
-------------------------------------------------------
用户变量与表名和列名具有相同的命名条件。变量名由当前字符集中的字母数字字符以及字符 "."、"_" 和 "$" 组成。要在变量名中使用其他字符,请将整个名称作为字符串或标识符放在引号内。例如,@'my-var'、@ "my-var" 或 @ `my-var` 。

对于 SET,使用 = 或:= 作为赋值运算符。为变量赋值（文字或表达式）时,值的数据类型必须为整数、十进制、二进制或非二进制字符串或 NULL。

如果将字符串分配给用户变量,则该变量将使用与该字符串相同的字符集和排序规则。 

用户变量的强制性是隐含的。（强制性定义了在单个表达式中的值之间存在排序规则冲突时转换哪个值的排序规则。）当您插入或更新排序规则与表中定义的归类不同的字符串时,这与表列值的工作方式相同。
