为什么MySql将INT类型列视为LONG?

时间:2017-06-02 15:06:04

标签: mysql

(MySQL版本5.6.36)

我们的数据库中有许多表,其列的类型为INT。 我只是从我们的货币表中对结果DataTable运行一个linq查询...并且隐式地将id字段转换为int。

A"指定演员表无效"发生了异常。

所以我决定在数据行上运行一个标准的foreach,获取id列的类型......确定它作为INT64返回。

这让我进一步陷入了兔子洞...我打开了一个控制台,并启动了mysql命令行,并打开了 - column-type-in​​fo 选项。并做了一个简单的查询。

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,而不是LONG,然后返回INT24。

只是想知道我遗失了一些简单的东西吗?

1 个答案:

答案 0 :(得分:0)

只需删除该表并创建一个新的未添加到id定义

的表
CREATE TABLE  currency (

id int(11) unsigned NOT NULL AUTU_INCREMENT,

// the other definitions 

);

希望你明白这一点。对不起,我正在通过手机写信。