mysql - MySQL整数字段匹配字符串是怎么回事?

标签 mysql

在我继承的数据库中,有时二进制问题被编码为("is",“否”),有时被编码为(1,0)。我错误地查询了数字编码字段上的字符串“Yes”。我的猜测是该字符串被 MySQL 变成了“0”。

我有一个这样的查询:

SELECT `children_under_18`
  FROM `households`
 WHERE `children_under_18` = 'Yes'
 GROUP BY `children_under_18`

它最终只匹配 children_under_18 为 0 的记录,这与我想要的相反。我知道我需要更加小心。我正在寻找有关发生的事情的明确答案。

最佳答案

与数字相比,字符串总是转换为0(当然包含数字+字符串的字符串会转换为数字。但这不是一个好的做法)

mysql> SELECT 'Yes' + 0;
+-----------+
| 'Yes' + 0 |
+-----------+
|         0 |
+-----------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+-----------------------------------------+
| Level   | Code | Message                                 |
+---------+------+-----------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'Yes' |
+---------+------+-----------------------------------------+

如果你想存储二进制值(是/否或真/假)或小值集,ENUM是不错的选择。 它占用的磁盘空间很小,并且可以使用有意义的字符串。

mysql> CREATE TABLE enum_test(a ENUM('Yes', 'No'));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into enum_test values('Yes'), ('No'), ('Invalid');
Query OK, 3 rows affected, 1 warning (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 1

mysql> show warnings;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'a' at row 3 |
+---------+------+----------------------------------------+
1 row in set (0.00 sec)

mysql> select * from enum_test where a = 'Yes';
+------+
| a    |
+------+
| Yes  |
+------+
1 row in set (0.00 sec)

mysql> select * from enum_test where a = 'No';
+------+
| a    |
+------+
| No   |
+------+
1 row in set (0.00 sec)

关于mysql - MySQL整数字段匹配字符串是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20110161/

相关文章:

mysql - 通过数据类型不匹配的两列连接两个表

javascript - (php)如何放置按钮来获取新的输入字段(内有图片)

用于性能优化的 mysqltuner 报告

mysql - SELECT 按字段中的值分组

我尝试在 RDS 上运行的 MySQL 代码出现语法错误,但在同一版本的语法检查器中,它运行良好

php - 使用PHP根据MySQL结果创建无序列表

MySQL - 带有额外列的 UNION DISTINCT

mysql - 最优数据库结构

python - SQL 查询显示结果比 Python 表中存储的结果多或少 30 分钟

php - MySQL查询优化——子查询+多重连接