2014-10-01 17 views
14

Bu MySQL hatası görüntülemekten nasıl sakınabilirim Sütun topic_id için sütun sütunu hatalı?Bu MySQL hatası almayı nasıl engelleyebilirim COLUMN NAME sütunu için yanlış sütun belirteci?

MySQL Hatası ...

#1063 - Incorrect column specifier for column 'topic_id' 

SQL Şeması ...

CREATE TABLE discussion_topics (
    topic_id char(36) NOT NULL AUTO_INCREMENT, 
    project_id char(36) NOT NULL, 
    topic_subject VARCHAR(255) NOT NULL, 
    topic_content TEXT default NULL, 
    date_created DATETIME NOT NULL, 
    date_last_post DATETIME NOT NULL, 
    created_by_user_id char(36) NOT NULL, 
    last_post_user_id char(36) NOT NULL, 
    posts_count char(36) default NULL, 
    PRIMARY KEY (topic_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

cevap

26

Eğer INT veya kayan nokta türleri değil CHAR olarak sütununu deifne gerekir AUTO_INCREMENT kullanın.

AUTO_INCREMENT yalnızca imzasız değeri kullanın, bu nedenle UNSIGNED'u kullanmak iyidir;

CREATE TABLE discussion_topics (

    topic_id INT NOT NULL unsigned AUTO_INCREMENT, 
    project_id char(36) NOT NULL, 
    topic_subject VARCHAR(255) NOT NULL, 
    topic_content TEXT default NULL, 
    date_created DATETIME NOT NULL, 
    date_last_post DATETIME NOT NULL, 
    created_by_user_id char(36) NOT NULL, 
    last_post_user_id char(36) NOT NULL, 
    posts_count char(36) default NULL, 
    PRIMARY KEY (topic_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 
+0

onu işaret için teşekkürler Belki de tembel olmak ama dummy açısından farkı tanımlamak için kolay bir 1-2 cümle yolu var “UNSIGNED” ve “SIGNED” olarak ne anlama geliyor maalesef ne anlama geliyor ve şu an bir saat okumaya vaktim yok mu? – JasonDavis

+2

Klasik INT'yi tanımladığınızda, -2147483648 ile 2147483647 arasındaki değerler işaretlenir, ancak otomatik olarak kaydedilen değerler yalnızca artı işaretli olabilir, bu nedenle imzasız kullandığınızda, mysql 0'dan 4294967295'e kadar olan sayıları bekler, aynı oğlu INT 4kb'dir ve aynı 4kb'de iki kat daha fazla giriş kullanabilirsiniz :) umarız –

2

doc alıntı: Bazı özellikler tüm veri türleri için geçerli değildir

. AUTO_INCREMENT, yalnızca tamsayı ve kayan nokta türleri için geçerlidir. DEFAULT, için BLOB veya TEXT türlerine uygulanmaz. Senin durumunda

, sen char sütuna AUTO_INCREMENT değiştirici uygulamak için çalışıyoruz. Bunu çözmek için, AUTO_INCREMENT'u tamamen bırakın (bu, uygulama düzeyinde benzersiz bir kimlik oluşturmanız gerekir) veya ilgili tamsayıya topic_id türünü değiştirmeniz yeterlidir. Bu sütunun tür muhtemelen de değiştirilmelidir böylece

Bir not olarak, bu sayımı mesajları saklamak için char(36) kullanarak küçük mantıklı. Tamsayı taşmasını engellemek için bu şekilde gidiyorsunuz gibi görünüyor - ancak tek bir başlık altında 18446744073709551615'dan daha fazla (BIGINT UNSIGNED sütununda depolanabilecek en büyük sayı) ile uğraşıyorsanız, yanınızda çok büyük bir sorun var muhtemelen.)

auto_increment özellik yalnızca sayısal sütunlar (tamsayı ve kayan nokta için çalışır
+0

Bunu biliyordum! Ben de bu sorun olabilir ama Dokümanlar üzerinde kayma olduğunu düşündüm Dokümanlar çok – JasonDavis

5

) değil, char sütunlar:

CREATE TABLE discussion_topics (
    topic_id INT NOT NULL AUTO_INCREMENT, 
    project_id char(36) NOT NULL, 
    topic_subject VARCHAR(255) NOT NULL, 
    topic_content TEXT default NULL, 
    date_created DATETIME NOT NULL, 
    date_last_post DATETIME NOT NULL, 
    created_by_user_id char(36) NOT NULL, 
    last_post_user_id char(36) NOT NULL, 
    posts_count char(36) default NULL, 
    PRIMARY KEY (topic_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 
2

başlayacak otomatik char değerlerini artırmaz olabilir. int veya long olmalıdır (tamsayılar veya kayan noktalar).

CREATE TABLE discussion_topics (
    topic_id int(5) NOT NULL AUTO_INCREMENT, 
    project_id char(36) NOT NULL, 
    topic_subject VARCHAR(255) NOT NULL, 
    topic_content TEXT default NULL, 
    date_created DATETIME NOT NULL, 
    date_last_post DATETIME NOT NULL, 
    created_by_user_id char(36) NOT NULL, 
    last_post_user_id char(36) NOT NULL, 
    posts_count char(36) default NULL, 
    PRIMARY KEY (`topic_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

Umut bu

+0

int (36)? Cehennem yok! : D –

+0

Bu bir hataydı. Teşekkürler M.Svrcek – codebot

2

Ben de aynı sorunu ancak uzun türünü kullanan yardımcı olur, bununla deneyin. INT için değiştim ve benim için çalıştı.

CREATE TABLE lists (
id INT NOT NULL AUTO_INCREMENT, 
desc varchar(30), 
owner varchar(20), 
visibility boolean, 
PRIMARY KEY (id) 
); 
İlgili konular