2017-06-01 1 views
0

Hier, j'ai supprimé mes tables db, parce que j'avais besoin de changer latin1_swedish_ci à utf8_general_ci pour avoir un mot polonais dans mes applications. Après que je ne peux pas migrer ma base de données complète, parce que j'ai un problème comme ça:Après avoir changé latin1_swedish_ci en utf8_general_ci ne peut pas migrer db

(venv) C:\netbast\fastandbeauty\project>manage.py migrate 
Operations to perform: 
    Apply all migrations: admin, auth, comments, contenttypes, registration, sessions, social_django, user_content, user_profile 
Running migrations: 
    Applying social_django.0005_auto_20160727_2333...Traceback (most recent call last): 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\backends\utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\backends\mysql\base.py", line 101, in execute 
    return self.cursor.execute(query, args) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\cursors.py", line 250, in execute 
    self.errorhandler(self, exc, value) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\connections.py", line 50, in defaulterrorhandler 
    raise errorvalue 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\cursors.py", line 247, in execute 
    res = self._query(query) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\cursors.py", line 411, in _query 
    rowcount = self._do_query(q) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\cursors.py", line 374, in _do_query 
    db.query(q) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\connections.py", line 292, in query 
    _mysql.connection.query(self, query) 
_mysql_exceptions.OperationalError: (1071, 'Specified key was too long; max key length is 1000 bytes') 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "C:\netbast\fastandbeauty\project\manage.py", line 22, in <module> 
    execute_from_command_line(sys.argv) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\core\management\__init__.py", line 363, in execute_from_command_line 
    utility.execute() 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\core\management\__init__.py", line 355, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\core\management\base.py", line 330, in execute 
    output = self.handle(*args, **options) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\core\management\commands\migrate.py", line 204, in handle 
    fake_initial=fake_initial, 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\migrations\executor.py", line 115, in migrate 
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\migrations\executor.py", line 145, in _migrate_all_forwards 
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\migrations\executor.py", line 244, in apply_migration 
    state = migration.apply(state, schema_editor) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\migrations\migration.py", line 129, in apply 
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\migrations\operations\models.py", line 536, in database_forwards 
    getattr(new_model._meta, self.option_name, set()), 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\backends\base\schema.py", line 353, in alter_unique_together 
    self.execute(self._create_unique_sql(model, columns)) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\backends\base\schema.py", line 120, in execute 
    cursor.execute(sql, params) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\backends\utils.py", line 80, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\backends\utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\utils.py", line 94, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\utils\six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\backends\utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\django\db\backends\mysql\base.py", line 101, in execute 
    return self.cursor.execute(query, args) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\cursors.py", line 250, in execute 
    self.errorhandler(self, exc, value) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\connections.py", line 50, in defaulterrorhandler 
    raise errorvalue 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\cursors.py", line 247, in execute 
    res = self._query(query) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\cursors.py", line 411, in _query 
    rowcount = self._do_query(q) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\cursors.py", line 374, in _do_query 
    db.query(q) 
    File "C:\netbast\fastandbeauty\venv\lib\site-packages\MySQLdb\connections.py", line 292, in query 
    _mysql.connection.query(self, query) 
django.db.utils.OperationalError: (1071, 'Specified key was too long; max key length is 1000 bytes') 

Je ne sais pas ce que je peux faire, parce que je suis apprenti. J'ai trouvé des réponses, mais cela ne m'a pas aidé.

Désolé pour mon mauvais anglais.

PS. Quand je démarre le serveur, il fonctionne, mais social-django ne fonctionne pas. Seule cette application ne peut pas migrer.

Tous les meilleurs, Dinson

+0

La table 'fastandbeauty.social_auth_association' existe-t-elle bien? – Adder

+0

Je pense que non. Regardez toutes mes tables: https://s1.postimg.org/8e0wzf9hxr/Przechwytywanie.png – Dinson

+0

Lorsque vous avez dit "J'ai supprimé toutes mes tables", voulez-vous dire que vous avez supprimé les "fichiers de migration" du dossier "migrations"? et a essayé de faire des migrations? et est-ce votre base de données de développement avez-vous des données sensibles à ce sujet? – PetarP

Répondre

0

Je n'ai pas de problème pour le moment. Que pouvez-vous faire pour le réparer?

Vous devez aller à my.ini (fichiers de configuration dans votre SQL) et changer MyISAM

default_tmp_storage_engine=MYISAM 

à

default-storage-engine=InnoDB 

Merci pour l'aide les gars!

0

Responsabilité: Je ne suis pas un expert sur ce sujet, je qu'énoncer ma pratique actuelle et suggestion est juste une suggestion en fin de compte que vous avez décidez si vous allez l'utiliser.

Essayons de résoudre le problème, dans votre terminal aller et tapez:

  • mysql -u root
  • puis après avoir entré mysql moniteur, vous vérifiez si votre base de données fastandbeauty existe toujours en tapant SHOW_DATABASE;
  • si la base de données est toujours là déposer avec DROP DATABASE fastandbeauty;
  • puis recréer et créer une nouvelle base de données en tapant CREATE SCHEMA fastandbeauty DEFAULT CHARACTER SET utf8, si tout est rig moniteur ht doit omettre un message Query OK, 1 row affected (0.00 sec), après que vous pouvez taper SHOW_DATABASE à nouveau et voir si la base de données existe
  • laisser mysql monitor en tapant \q
  • alors vous pouvez faire python manage.py migrate

qui devrait créer un nouveau fastandbeauty database et vous pouvez continuer à travailler dessus.

maintenant une référence future:

Je vous suggère de ne pas utiliser votre base de données de développement sur la production locale de sorte que vous ne rencontrez pas des choses comme ça où vous avez besoin pour créer manuellement/supprimer votre db.

Donc, vous pouvez dump vos données dans un fichier, avec ce fichier, vous allez stocker certaines de vos données pour le développement local. Comment l'utiliser?

Eh bien, vous pouvez faire de nouveaux git branch et nommez quelque chose comme local-dev-task-12, vous travaillerez sur cette branche à l'avenir, vous pouvez créer une nouvelle base de données pour cette seule branche et appeler la base de données fast_and_beauty12, faites simplement les étapes que je avons tous prêts expliqué, mais avant migration, cd dans le dossier où vous gardez votre dump file et à cette première:

  • mysql -u root -p fast_and_beauty_12 < DumpFastAndBeauty.sql - ce videra vos données dans de nouveaux et frais fast_and_beauty_12 base de données créée
  • go i Nto votre fichier setting db et changer le nom de la base de données à cette nouvelle que vous avez créer si fastandbeauty >>fast_and_beauty12 afin que vous puissiez l'utiliser
  • et vous allez faire python manage migrate.py

Avec cela, vous aurez une nouvelle base de données pour ce git branch et vous pouvez travailler sur votre base de données sans se soucier de faire du tort à la base de données dev.

REMARQUE:

Vous ne commettrez pas de nouveaux fichiers migration de cette branche, parce que cela va rendre les choses vont mal, vous git stash. eux pour le travail futur.

Une fois que vous avez planqué migrations les fichiers remontent à setting.py et changer ce nom vous local database vous development database nom pour fast_and_beauty12-fastandbeauty, migrer de nouveaux changements dans la development branch et vous pouvez faire

python manage.py migrate, ce qui devrait vous peupler development database avec de nouvelles données. L'idée de ceci est d'avoir une nouvelle base de données de travail chaque fois que vous créez une nouvelle branche pour le développement local, c'est un peu déroutant au début mais après quelque temps vous le comprendrez et commencerez à le faire plus souvent. Potentiellement, vous n'avez pas besoin de faire cela si vous ne travaillez pas sur votre base de données, mais je pense que c'est une bonne pratique.

+0

L'erreur du terminal est mise à jour dans le premier message. Fais attention. – Dinson