2016-04-08 24 views
0

我的一個朋友正在問我的幫助,他有蒸汽遊戲服務器。他使用了一個mysql數據庫,並且在他的遊戲中有一個插件,用於存儲STEAM ID(遊戲中的玩家ID)MYSQL>在int(11)插入蒸汽id與似乎很長的nosteam帳戶

我測試了遊戲中的數據(STEAM ID從64位轉換爲32位)它是什麼插入分貝......結果不等於...

奇怪的是ID爲「2150032574」成爲MySQL的數據字段INT(11)「-2144934722」

我已經測試了所有代碼PHP和SMX在遊戲中驗證所有數據...並根據我(但我不確定)它將來自SQL和數據(ID)長度而不是代碼的關係。

有可能是ID的長度太大(也許是因爲無符號的ID值?),並轉換我不知道如何進入負值?

我能做些什麼來解決這個問題?我想像將int(11)更改爲一個varchar(128),例如...但對我而言,這似乎如此如此如此如此殘酷和異常...

請有人可以幫忙嗎?

乾杯。

回答

1

http://dev.mysql.com/doc/refman/5.7/en/integer-types.html

簽名INT秒(11不涉及到最大值的字段可存儲),最多可存儲值到2147483647 UNSIGNED INT S能值存儲多達4294967295不過既然你寫的,你是在存儲2150032574之後得到負值,您的字段不是UNSIGNED,因此只能存儲值最大爲2147483647.

假設您沒有對字段的主鍵或外鍵約束,那麼可以使用ALTERUNSIGNED,像這樣:ALTER TABLE steamids MODIFY COLUMN steamid INT(11) UNSIGNED;

+0

很大的反響!完美的解釋! 如果我將結構從int更改爲bigint()會怎麼樣? – Titus

0

好的解決問題通過簡單的現場驗證ID的結構從int()改爲BIGINT()

ALTER TABLE DBTABLE CHANGE FIELDFIELD BIGINT(255)NOT NULL