2017-06-01 31 views
0

昨天我删除了我的数据库表,因为我需要将latin1_swedish_ci更改为utf8_general_ci,以便在我的应用程序中使用波兰语。之后,我不能做完全迁移我的数据库,因为我有这样的问题:将latin1_swedish_ci更改为utf8_general_ci后无法迁移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') 

我不知道我能做些什么,因为我的徒弟。我找到了答案,但它并没有帮助我。

对不起,我的英语不好。

PS。当我启动服务器运行时,但社交django不起作用。只有该应用程序无法迁移。

一切顺利, 鼎晟

+0

那么表'fastandbeauty.social_auth_association'存在吗? – Adder

+0

我觉得没有。看看我所有的表格:https://s1.postimg.org/8e0wzf9hxr/Przechwytywanie.png – Dinson

+0

当你说“我删除了我所有的表格”时,你的意思是你已经从'migrations文件夹'中删除了'迁移文件'并试图进行迁移?这是你的开发数据库吗?你有任何敏感数据吗? – PetarP

回答

0

我现在没有问题。你能做些什么来解决它?

你需要去MY.INI(conf文件在你的SQL),并改变MYISAM

default_tmp_storage_engine=MYISAM 

default-storage-engine=InnoDB 

感谢您的帮助家伙!

0

免责声明:我不是这方面的专家,我只是说我目前的做法,并在这里建议只是一个建议最终你已经决定是否要使用它。

让我们尝试解决这个问题,在你的终端去类型:

  • mysql -u root
  • 然后你进入mysql监视器后,请检查您的fastandbeauty数据库仍然通过键入SHOW_DATABASE;
  • 是否存在数据库仍然存在,用DROP DATABASE fastandbeauty;
  • 然后通过输入CREATE SCHEMA fastandbeauty DEFAULT CHARACTER SET utf8重新创建并创建一个新的数据库,如果所有东西都是索引HT显示器应该忽略的消息Query OK, 1 row affected (0.00 sec),之后就可以再次输入SHOW_DATABASE,看看是否存在数据库
  • 离开mysql monitor通过键入\q
  • 那么你可以做python manage.py migrate

应该创建一个新的fastandbeauty database和你可以继续工作。

现在一些将来参考:

我建议你不要使用本地生产开发数据库,​​这样你就不会遇到这样的事情,你需要手动创建/删除你的数据库。

因此,您可以将dump数据转换为文件,并使用该文件存储一些用于本地开发的数据。如何使用它?

那么你可以结交新git branch并将其命名为类似​​,所以你会在这个分支在今后的工作,那么你可以为这个分支只有创建新的数据库并调用数据库fast_and_beauty12,只是做的步骤,我“已经都准备好了解释,但migrationcd到您让您的dump file的文件夹,这个第一前:

  • mysql -u root -p fast_and_beauty_12 < DumpFastAndBeauty.sql - 这将转储数据到新的和新鲜的fast_and_beauty_12创建的数据库
  • 我走n要你setting db文件,更改数据库名称到新的你已经创建这样fastandbeauty >>fast_and_beauty12,所以你可以用它
  • ,然后你去做python manage migrate.py

有了这个,你将有一个新的数据库为那个git branch,你可以在你的数据库上工作,不用担心会损坏dev数据库。

注:

你不会从该分支提交新migration文件,因为这将让事情变坏,你会git stash。他们为未来的工作。

你藏起来后migrations文件回到setting.pydevelopment database名称更改你local database这个名字你这么fast_and_beauty12fastandbeauty,新的变化迁移到development branch,你可以做

python manage.py migrate,所以应该用新数据填充development database

这样做的想法是在每次为本地开发创建新分支时都有新的工作数据库,它在开始时有点混淆,但过了一段时间后,您会理解它,并开始更频繁地执行此操作。如果你不打算在你的数据库上工作,你可能不需要这样做,但我认为这是一个好习惯。

+0

来自终端的错误在第一篇文章中更新。小心。 – Dinson