(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上,數據類型不會更改。 –