2012-07-21 217 views
10

我知道將某些東西從較大的數據類型轉換爲較小的數據類型是非正統且潛在的危險。但是,在這種情況下,BIGINT UNSIGNED列的值不可能大於INT列的最大大小。將BIGINT UNSIGNED轉換爲INT

所以,使用MySQL,我正在閱讀表結構。在閱讀information_schema.columns.ordinal_position專欄時,我意識到它是BIGINT UNSIGNED。現在,我想將其作爲INT來代替我的處理目的。我想在SQL中轉換/轉換類型。

CASTCONVERT只允許我改變數據類型的標誌,顯然。

SELECT CAST(ordinal_position AS SIGNED) 
FROM information_schema.columns 

我希望列專門作爲INT返回。例如。切割色譜柱的最大值爲INT並返回該值。

現在我只是在將值拉回來之後更改數據類型。但我想知道如何在SQL中完成它。

回答

6

this article似乎有一個解決方案:

Create the function that will perform the conversion:

CREATE FUNCTION BigToInt (n BIGINT) RETURNS INTEGER RETURN n;

As you can see, the function is very short and simple: It takes a BIGINT and immediately returns it as an ordinary integer. However, one consequence of this is that some of the data will be truncated down to the largest possible value for Int.

(想必你可以添加「無符號」的簽名 - 如果沒有你仍然可以投結合起來,你已經擁有了刪除未簽名的一部分)。

+1

有什麼替代方法可以不創建函數?不得不記得在使用後拆卸功能是一件麻煩事。 – Pacerier 2015-01-26 13:01:41

0

如果您嘗試創建函數的方式,你會得到這樣的錯誤:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, 
or READS SQL DATA in its declaration and binary logging is enabled 
(you *might* want to use the less safe log_bin_trust_function_creators 
variable) 

查看如何解決此鏈接的詳細信息:

http://dev.mysql.com/doc/refman/5.0/en/stored-programs-logging.html

+1

在這種特殊情況下,修正是添加'DETERMINISTIC'。 – dolmen 2016-01-07 17:53:11

1

我很遺憾沒沒有權利在我工作的數據庫上創建功能,所以在嘗試了幾件事情之後,它可以工作:

ALTER TABLE table_name MODIFY column_name INTEGER; 

保存了我不得不重寫15個外鍵。

相關問題