このMySQLエラーが発生しないようにするにはどうすればよいですか?列topic_idの列指定子が正しくありません?
MySQLエラー...
#1063 - Incorrect column specifier for column 'topic_id'
SQLスキーマ...
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;
AUTO_INCREMENT
を使用するには、INT
ではなく、CHAR
または浮動小数点型として列を定義する必要があります。
AUTO_INCREMENT
は符号なしの値のみを使用するため、UNSIGNED
も使用するのが適切です。
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;
auto_increment
プロパティは、数値列(整数および浮動小数点)でのみ機能し、char
列では機能しません。
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;
doc の引用:
一部の属性はすべてのデータ型に適用されるわけではありません。 _
AUTO_INCREMENT
_は、整数型および浮動小数点型にのみ適用されます。DEFAULT
は、BLOB
またはTEXT
タイプには適用されません。
あなたのケースでは、char
列に_AUTO_INCREMENT
_修飾子を適用しようとしています。これを解決するには、_AUTO_INCREMENT
_を完全にドロップする(つまり、アプリケーションレベルで一意のIDを生成する必要がある)か、単に_topic_id
_タイプを関連する整数に変更します。
補足として、char(36)
を使用して投稿countを保存することはほとんど意味がないため、おそらく列のタイプも変更する必要があります。整数オーバーフローを防ぐためにこの方法を使用しているように見えますが、単一のトピックで_18446744073709551615
_投稿(_BIGINT UNSIGNED
_列に保存できる最大数)を超える投稿を処理している場合、おそらくあなたの側にはるかに大きな問題があります。 )
私は同じ問題を抱えていましたが、ロングタイプを使用していました。 INTに変更しましたが、うまくいきました。
CREATE TABLE lists (
id INT NOT NULL AUTO_INCREMENT,
desc varchar(30),
owner varchar(20),
visibility boolean,
PRIMARY KEY (id)
);
char
値を自動インクリメントすることはできません。 int
またはlong
(整数または浮動小数点)でなければなりません。これで試してみて、
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;
お役に立てれば