テーブルを次のように定義したmysqlデータベースがあります。
CREATE TABLE IF NOT EXISTS tblModel (
model_id int NOT NULL AUTO_INCREMENT,
model_file varchar(50) NOT NULL,
model_name varchar(50) NOT NULL,
model_descrip varchar(200) NOT NULL,
target_index char(6) NOT NULL,
training_days int NOT NULL,
trading_days int NOT NULL,
PRIMARY KEY(model_id));
奇妙なことに、mysql のドキュメントでは int は実際には int(4) であると書かれていますが、int フィールドが実際には int(11) として作成されていることに気付きました。ドキュメントによると、私の指示に従わなかったように見えるので、これは少し気がかりです。
mysqldb.database_connection.cursor を使用してこのテーブルを python にクエリすると、int が long として渡されていることがわかります - 驚くことではありません。
したがって、私の質問は 3 つあります (重要度の高い順に):
1) int が int(11) として作成された理由は何ですか?
2) このテーブルの int フィールドには、シーケンス # と日数が保持されます。long に割り当てられたスペースは、ほとんど必要ありません。無駄なスペースを気にする必要がありますか?
3) 私が int(11) で立ち往生していると仮定すると (他のテーブルにはこれへの外部キーがあり、すべてを壊して再作成するのは少し面倒です)、 int への明示的なキャストを行うよりも良い解決策はありますか? cur.fetchall() または cur.fetchone() が返す?