MySQL类型隐式转换规则

在MySQL语句里,如果操作符应用于不同的类型的操作数,为了兼容让操作数兼容,MySQL会对操作数做类型转换,有些是自动的隐式转换。

“+”号操作符

使用“+”号相加的是字符串或字符串和数字,字符串会隐式转换为数字。

以数字开头的字符串

以数字开头的字符串,它会截取前面的数字字符串,转换为对应的数字。

mysql> select '1a' + 1;
+----------+
| '1a' + 1 |
+----------+
|    2 |
+----------+
1 row in set, 1 warning (0.00 sec)

字符串'1a'转换为数字1。并且有一条警告提示。

mysql> show warnings;
+---------+------+----------------------------------------+
| Level  | Code | Message                |
+---------+------+----------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: '1a' |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

使用show  warnings查看警告,提示Truncated incorrect DOUBLE value: '1a',意思是对‘1a’做了截取

以字符开头的字符串

以字符开头的字符串,使用加号相加时会把字符串转换为0。

mysql> select 'a1' + 1; 
+----------+
| 'a1' + 1 |
+----------+
|    1 |
+----------+
1 row in set, 1 warning (0.00 sec)

这里把“1a”改为“a1”,字符串“a1”被转换为了0。

字符连接函数CONCAT()

mysql> SELECT CONCAT(1,' test'); 
+-------------------+
| CONCAT(1,' test') |
+-------------------+
| 1 test      |
+-------------------+
1 row in set (0.03 sec)

使用CONCAT函数连接多个字符串时,对于数字,它会自动隐式转换为字符串。

比较操作符

使用比较操作符比较数字与字符串时,字符串类型会隐式转换为数字。

示例

mysql> SELECT 1 > '6x';
0
mysql> SELECT 7 > '6x';
1
mysql> SELECT 0 = 'x6';
        -> 1
mysql> SELECT 'a' = '0';
0

使用>,<,=比较符比较数字和字符串,字符串转换为数字遵从:

  1. 以数字开头的字符串,截取前面的数字字符串,转换为对应的数字
  2. 以字符开头的字符串,字符串即使包含了数字,也会转换为0。
  3. 字符串与字符串的比较,即使是纯数字的字符串,这种情况下不做类型转换,如例子里的'a' = '0'

Where语句里的隐式转换

在Where语句里使用

SELECT * FROM tbl_name WHERE str_col=数字;

示例

SELECT * FROM user WHERE name = 0;

由于等式比较name=0,name会自动转换为0,所以name=0的结果为true。SELECT 语句会返回所有的数据。

版权声明:著作权归作者所有。

相关推荐

Python:有关IntEnum类型的比较

枚举类型的使用请参考:Python3.4 枚举类型的使用。我们在使用Enum定义枚举类型,枚举的成员不是整型,所以在做比较时不能使用如大于号(">"),小于号(“<”)作比较。只用做相等性比较。但直接和整型做相等比较,结果都为False。Python新增了IntEnum,IntEnum是允许和整型做比较,包括大小比较和值得相等比较。创建IntEnum定义I

[译]使用JDK 9 Flow API进行响应式编程

什么是响应式编程?响应式编程是关于处理数据项的异步流,也就是应用程序在数据项发生时对其进行响应。 数据流实质上是指随时间发生的数据项序列。与迭代内存数据相比, 这个模型的内存效率更高,因为数据是以流的形式处理的。在响应式编程模型中,有一个Publisher和一个Subscriber。 Publisher发布一个数据流,Subscriber异步订阅。该模型还提供了一种机

Kotlin:基本类型 - Char与Boolean

字符类型Kotlin使用Char表示字符,与Java不同的是,它并不能直接和数字做类型转换。字符表示它们使用单引号''把字符括起来特殊字符:特殊字符串使用反斜杠开头,如\t, \b, \n, \r, \', \", \\ and \$其他一些字符可以使用Unicode编码,如'\uFF00'数字转换Kotlin的字符不能直接和数字做类型转换,但我们可以它们的unicode码的相对差来做数

Kotlin:基本类型 - 数值

内置数值类型Kotlin和Java的数值类型很接近,内置了6中数值类型:Double:64 Float:32 Long:64 Int:32 Short:16 Byte:8 在Java里,char类型也是一种数值类型,可以和其他数值类型转换,而在Kotlin则没有把char类型作为数值类型。字面量整数整数类型:Shot,Int和Long。和Java一样,Long类型的字面量在数字后面加上L来表示。&

AngularJS非字符插值计算规则

在AngularJS里,插值会把嵌入的表达式转换为字符串,对于非字符串转换规则如下:1、undefined和null转换为空字符串''。2、如果值是一个Object对象,但不是Number,Date和Array类型,$interpolate变量会先查找用户自定义的toString()函数,如果找到了,使用toString()函数来转换为字符串。注意,这里的用户自定义意味myObject.toStr