2017-06-02 121 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。我只是感到困惑。 –

相關問題