Found mysql two issues in new dal.py First issues
mysql VARCHAR length should be 0 to 255,but web2py default varchar value was set to length = 512,if some forgot to declare varchar length he will get error message key too long. Second issue After creating FK in the model if we declare db.define_table('dogs', Field('teamname'),primarykey=['teamname'],migrate=False ) db.define_table('users', Field('name'), Field('team',db.dogs) ) db.users.name.requires = IS_NOT_EMPTY() db.users.team.requires = IS_IN_DB(db,'dogs.teamname','dogs.teamname') sql : CREATE TABLE users( id INT AUTO_INCREMENT NOT NULL, name VARCHAR(100), team id, INDEX team__idx (team), FOREIGN KEY (team) REFERENCES dogs(teamname), PRIMARY KEY(id) ) ENGINE=InnoDB CHARACTER SET utf8; Here teamname was set to string and team in the user table goes interger ,then it throws error 1005 can't create table users 'reference': 'INT, INDEX %(field_name)s__idx (%(field_name)s), FOREIGN KEY (%(field_name)s) REFERENCES %(foreign_key)s ON DELETE %(on_delete_action)s', as wrokaround i have changed the dal file to 'reference': 'VARCHAR(100), INDEX %(field_name)s__idx (%(field_name)s), FOREIGN KEY (%(field_name)s) REFERENCES %(foreign_key)s ON DELETE %(on_delete_action)s', then it works.