(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。
只是想知道是否有什么简单的我失踪?
这可能会有所帮助[https://stackoverflow.com/questions/5634104/what-is-the-size-of-column-of-int11-in-mysql-in-bytes] –
谢谢,但我已经读完了......我没有看到这个现象。 – matthyde
我不太确定问题在于控制台响应,因为在MysqlWork bench和SQL Yog上,数据类型不会更改。 –