为什么MySql将INT类型的列视为长列?
(MySQL版本5.6.36) 数据库中有许多表的列类型为INT。 我刚刚对我们货币表中的结果数据表运行了一个linq查询。。。并隐式地将id字段转换为int 发生“指定的强制转换无效”异常 所以我决定在数据行上运行一个标准的foreach,获取id列的类型。。。果然,它是以INT64的形式返回的 这把我带进了兔子洞。。。我打开了一个控制台,启动了mysql命令行,打开了选项--column type info。。。然后做了一个简单的查询为什么MySql将INT类型的列视为长列?,mysql,Mysql,(MySQL版本5.6.36) 数据库中有许多表的列类型为INT。 我刚刚对我们货币表中的结果数据表运行了一个linq查询。。。并隐式地将id字段转换为int 发生“指定的强制转换无效”异常 所以我决定在数据行上运行一个标准的foreach,获取id列的类型。。。果然,它是以INT64的形式返回的 这把我带进了兔子洞。。。我打开了一个控制台,启动了mysql命令行,打开了选项--column type info。。。然后做了一个简单的查询 mysql> select id from cur
mysql> select id from currency;
Field 1: `id`
Catalog: `def`
Database: `intranet`
Table: `currency`
Org_table: `currency`
Type: LONG
Collation: binary (63)
Length: 11
Max_length: 1
Decimals: 0
Flags: NOT_NULL PRI_KEY AUTO_INCREMENT NUM PART_KEY
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
+----+
3 rows in set (0.00 sec)
以下是描述:
+----------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| currency | varchar(3) | YES | | NULL | |
| per_usd | double | YES | | NULL | |
+----------+------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
以及创建:
CREATE TABLE `currency` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`currency` varchar(3) DEFAULT NULL,
`per_usd` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
但这不仅仅限于这张桌子。。。所有表都显示INT,但返回LONG
在测试中,我将id列更改为MEDIUMINT,然后它返回一个INT24,而不是LONG
只是想知道我是否遗漏了一些简单的内容?只需删除该表并创建一个新表,然后将其添加到id定义中
CREATE TABLE currency (
id int(11) unsigned NOT NULL AUTU_INCREMENT,
// the other definitions
);
希望你明白我的意思。抱歉,我正在用手机写信。无论是否未签名,它仍然返回相同的:
类型:LONG
我再次阅读了您的问题,发现所有表格都返回LONG。我做了一些阅读,发现长数据类型是ORACLE的东西。我甚至检查了我的MYSQL数据库,没有长数据类型。我想说的是,你的数据库可能是ORACLE,但你的代码显示的是MYSQL。我只是感到困惑。这可能会有帮助[谢谢,但我已经通读了…我看不到任何东西可以解释这种现象。我不太确定问题在于控制台响应,因为在MysqlWork bench和SQL Yog上,数据类型没有改变。请分享您使用的控制台。使用mysql服务器附带的stock console应用程序-mysql