MySQL 函数和运算符:表达式赋值中的类型转换

来自Wikioe
跳到导航 跳到搜索


当一个运算符与不同类型的操作数一起使用时,将进行类型转换以使操作数兼容:

  1. 一些转换是隐式发生的。例如,MySQL 根据需要自动将字符串转换为数字,反之亦然。
    mysql> SELECT 1+'1';
            -> 2
    mysql> SELECT CONCAT(2,' test');
            -> '2 test'
    
  2. 也可以使用“CAST()”函数将数字显示转换为字符串。使用“CONCAT()”函数进行隐式转换,因为它需要字符串参数。
    mysql> SELECT 38.8, CAST(38.8 AS CHAR);
            -> 38.8, '38.8'
    mysql> SELECT 38.8, CONCAT(38.8);
            -> 38.8, '38.8'
    


比较操作如何发生转换:

  1. 如果一个或两个参数均为NULL,则比较结果为NULL,除了NULL -safe <=>相等比较运算符。对于“NULL <=> NULL”,结果为 true。无需转换。
  2. 如果比较操作中的两个参数都是字符串,则将它们作为字符串进行比较。
  3. 如果两个参数都是整数,则将它们作为整数进行比较。
  4. 如果不与数字比较,则将十六进制值视为二进制字符串。
  5. 如果参数之一是“TIMESTAMP”或“DATETIME”列,而另一个参数是常量,则在执行比较之前,该常量将转换为时间戳。这样做是为了使 ODBC 更友好。 “IN()”的自变量未完成此操作。为了安全起见,在进行比较时,请始终使用完整的日期时间,日期或时间字符串。
    例如,为了在将“BETWEEN”与日期或时间值一起使用时获得最佳结果,请使用“CAST()”将值显式转换为所需的数据类型。
  6. 如果参数之一是十进制值,则比较取决于另一个参数。如果另一个参数是十进制或整数值,则将参数作为十进制值进行比较;如果另一个参数是浮点值,则将参数作为浮点值进行比较。
  7. 在所有其他情况下,将参数作为浮点数(实数)进行比较。例如,将字符串和数字操作数进行比较,将其作为浮点数的比较。