- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我做的时候
SELECT (column1 == 1) AS isOne FROM table1;
我希望得到一个包含 BOOL 类型列的结果集,又名 TINYINT(1)。不幸的是,我收到了“LONGLONG”。
这是一个实验。
CREATE TABLE `orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ref` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
启动带有额外类型信息的 MySQL 提示 --column-type-info
:
mysql> select id, id=1 as isOne from orders;
Field 1: `id`
Catalog: `def`
Database: `reson_it`
Table: `orders`
Org_table: `orders`
Type: LONG
Collation: binary (63)
Length: 11
Max_length: 1
Decimals: 0
Flags: NOT_NULL PRI_KEY AUTO_INCREMENT NUM PART_KEY
Field 2: `isOne`
Catalog: `def`
Database: ``
Table: ``
Org_table: ``
Type: LONGLONG <--------------- WTF Why is this not a boolean/tinyint(1) ???
Collation: binary (63)
Length: 1
Max_length: 1
Decimals: 0
Flags: NOT_NULL BINARY NUM
+----+-------+
| id | isOne |
+----+-------+
| 1 | 1 |
+----+-------+
1 row in set (0.00 sec)
如您所见,我在“isOne”结果字段中看到了这个 LONGLONG 类型。为什么会这样?
我在 mac 上使用 MySQL 5.6.27(安装了自制软件)。
最佳答案
Why does this happen?
因为 MySQL 就是这样做的。
有线协议(protocol)不允许列在结果集中的行与行之间具有不同的数据类型(也不会是理智的)因此服务器必须预先决定每列的数据类型,特别是在输出时列是派生的,并不直接来自单个特定的表/列(因为在这种情况下,输出列的定义是已知的......根据定义,你可能会说......源列的定义)。
您观察到的行为可能会也可能不会被清楚地记录下来——如果是的话,我不会立即找到它——但可以从一个列是添加两个 TINYINT
列的结果这一事实中推断出来在一起,甚至将文字 0 添加到 TINYINT
,实际上也将是 BIGINT
(longlong)——尽管理论上它不需要大于 SMALLINT
或 TINYINT
——取决于查询——但 MySQL 总是使用用于内部操作和派生整数输出列的 64 位值。
最后一部分已记录在案,将其推断到这种情况似乎也是合理的。
http://dev.mysql.com/doc/refman/5.6/en/arithmetic-functions.html
关于MySQL:SELECT (column == 'value') 返回类型为 “LONGLONG” 而不是 BOOL 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475873/
在此示例中,m_Amount 是 CString。 stringToNumber 函数将其成功转换为 LONGLONG 数字。但是当我想将它分配给一个变体时,我得到了这个错误: error C2440
根据 this MSDN 页面,数据类型 LONGLONG 定义如下。 #if !defined(_M_IX86) typedef __int64 LONGLONG; #else typedef
根据this article中的表格, Variant 类型不支持 VARENUM.VT_I8 - 这映射到 VBA 的 VbVarType.vbLongLong .这向我表明 Variant 不能容
我正在移植一些代码并遇到了这个 class Someclass { void Restart (IN TIMEX_STAMP rtMinTime = 0I64); }; 此代码在 visual
UINT One = 1; LONG mylong = LONG(-1) * One; LONGLONG mylonglong1 = LONG(-1) * One; LONGLONG
尝试执行以下代码时,出现 VBA 错误:类型不匹配。任何人都知道原因(和解决方案?:-)) 我将数据类型从 Long 更改为 LongLong,以便能够处理更大的数字。在此之前,代码(摘录)运行良好。
我正在尝试使用 Core Data 存储 long long 值。像 119143881477165 这样的值。我将该值存储在 NSNumber 中,该值是使用便捷方法 numberWithUnsig
当我做的时候 SELECT (column1 == 1) AS isOne FROM table1; 我希望得到一个包含 BOOL 类型列的结果集,又名 TINYINT(1)。不幸的是,我收到了“LO
我习惯在 Excel 2010(Windows 7 64 位)上使用以下代码,效果很好。 Sub code_on_2010() Dim i As Long i = InputBox("inpu
我是一名优秀的程序员,十分优秀!