2017-06-02 29 views
0

(MySQL版本36年6月5日)为什么MySql将INT类型的列视为LONG?

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

“指定的转换无效”异常发生。

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

这使我进一步下入兔子洞......我打开了一个控制台,并启动mysql命令行,还可以选择--column型信息开启...,做了简单的查询。

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。

只是想知道是否有什么简单的我失踪?

+0

这可能会有所帮助[https://stackoverflow.com/questions/5634104/what-is-the-size-of-column-of-int11-in-mysql-in-bytes] –

+0

谢谢,但我已经读完了......我没有看到这个现象。 – matthyde

+0

我不太确定问题在于控制台响应,因为在MysqlWork bench和SQL Yog上,数据类型不会更改。 –

回答

0

只要删除该表,并创建一个新的你添加未签名的ID定义

CREATE TABLE currency (

id int(11) unsigned NOT NULL AUTU_INCREMENT, 

// the other definitions 

); 

希望你明白了吧。对不起,我正在用手机写信。

+0

无符号或没有,它仍然返回相同的: '类型:LONG' – matthyde

+0

我又看了你的问题,发现所有表都返回LONG。我做了一些阅读,发现LONG数据类型是一个ORACLE的东西。我甚至检查过我的MYSQL数据库,并且没有任何LONG数据类型。我试图说,可能你的数据库是ORACLE,但你的代码显示MYSQL。我只是感到困惑。 –

相关问题