2016-04-08 14 views
0

Bir arkadaşım bana yardım istiyor, buhar oyunları için sunucuları var. Bir mysql veri tabanını kullanır ve oyunda STEAM ID (oyundaki bir oyuncunun ID'si)MYSQL> int (11) 'de int (11) nosteam hesabına eklenmesi neyseeam hesabına giriyor gibi görünüyor.

Oyunun verilerini test ettim (64 bit'den 32bit'e kadar STEAM ID dönüşümü) ve karşılaştırdım o db takıldığında ne ... sonuçlar tüm test ettik (11) "-2144934722"

Garip bir kimlik "2150032574" mySQL veri alanı int haline ... eşit değildir tüm verileri doğrulamak için oyunda PHP ve SMX kodunu ... ve bana göre (ama emin değilim) SQL'den ve koddan değil, veri (ID) arasındaki ilişkiden gelecektir.

Kimliğin uzunluğu çok büyük olabilir (belki de imzasız ID değeri yüzünden olabilir) ve dönüştürülürse bu negatif değere ne olduğunu bilmiyorum?

Ve bu sorunu gidermek için ne yapabilirim? Örneğin int (11) 'i bir varchar (128)' e dönüştürmeyi hayal ettim ... ama bu benim için çok acımasız ve anormal görünüyor ...

Lütfen birileri yardım edebilir mi?

Şerefe.

cevap

1

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

Signed INT doldu 4294967295 kadar Ama sen olduğunu yazdı beri değerlerini saklayabilir 2147483647 UNSIGNED INT s değerleri saklayabilirsiniz (11 alan saklayabilir maksimum değere ilgili değildir) 2150032574 sakladıktan sonra negatif bir değer elde, senin alanın UNSIGNED değildir ve bu nedenle, sadece mağaza değerleri kadar size sahada birincil veya yabancı anahtar kısıtlamaları yok varsayarsak 2147483647

için, sen yapmak için ALTER olabilir olabilir UNSIGNED, gibi: ALTER TABLE steamids MODIFY COLUMN steamid INT(11) UNSIGNED;.

+0

Büyük tepki NOT NULL! mükemmel açıklamalarla! Yapıyı int'den bigint() 'a değiştirirsem ne olur? – Titus

0

Tamam sorun basitçe int saha authId yapısını değiştirmek çözülür() bigint için()

ALTER tablo DBTABLE DEĞİŞİKLİĞİ FIELDFIELD BIGINT (255)

İlgili konular