将 latin1_swedish_ci 更改为 utf8_general_ci 后无法迁移数据库
After changed latin1_swedish_ci to utf8_general_ci can't migrate db
昨天我删除了我的数据库表,因为我需要将 latin1_swedish_ci 更改为 utf8_general_ci 以便在我的应用程序中使用波兰语。在那之后我不能完全迁移我的数据库,因为我有这样的问题:
(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。当我启动服务器时它运行,但 social-django 不工作。只有那个应用无法迁移。
祝一切顺利,
丁森
免责声明:我不是这方面的专家,我只是陈述我目前的做法,这里的建议只是建议 最终你决定是否要使用它。
让我们尝试解决问题,在您的终端中输入:
mysql -u root
- 然后在您进入
mysql
监视器后,您可以通过输入 SHOW_DATABASE;
检查您的 fastandbeauty
数据库是否仍然存在
- 如果数据库还在,用
DROP DATABASE fastandbeauty;
删除它
- 然后通过键入
CREATE SCHEMA fastandbeauty DEFAULT CHARACTER SET utf8
重新创建并创建一个新的新数据库,如果一切正常,监视器应该省略一条消息 Query OK, 1 row affected (0.00 sec)
,之后您可以再次键入 SHOW_DATABASE
和查看数据库是否存在
- 通过键入
\q
离开 mysql monitor
- 那么你可以
python manage.py migrate
应该会创建一个新的 fastandbeauty database
,您可以继续处理它。
现在一些未来的参考:
我建议您不要在本地生产中使用您的开发数据库,这样您就不会遇到需要手动 create/delete 您的数据库的情况。
因此您可以 dump 将您的数据放入一个文件中,您可以使用该文件存储一些数据以供本地开发。如何使用它?
那么你可以创建新的 git branch
并将其命名为 local-dev-task-12
,这样你将来会在这个分支上工作,然后你可以只为这个分支创建新的数据库并调用数据库 fast_and_beauty12
,只需执行我已准备好在 migration
、cd
之前解释的步骤,将其放入您保存 dump file
的文件夹中,首先:
mysql -u root -p fast_and_beauty_12 < DumpFastAndBeauty.sql
- 这会将您的数据转储到新的 fast_and_beauty_12
创建的数据库中
- 进入您的
setting db
文件并将数据库名称更改为您创建的新数据库名称,这样 fastandbeauty
>> fast_and_beauty12
这样您就可以使用它了
- 然后你去做
python manage migrate.py
有了这个,您将拥有一个新的 git branch
数据库,您可以在您的数据库上工作,而不必担心对 dev
数据库造成伤害。
注意:
您不会从该分支提交新的 migration
文件,因为这会使事情变糟,您会 git stash。他们为未来的工作。
在你隐藏 migrations
文件后回到 setting.py
并把你的名字 local database
改成你的 development database
名字所以 fast_and_beauty12
到fastandbeauty
,将新更改迁移到 development branch
,您可以
python manage.py migrate
,这样应该会用新数据填充您 development database
。
这个想法是每次为本地开发创建新分支时都有新的工作数据库,一开始有点混乱,但一段时间后你会理解它,并开始更频繁地这样做。如果您不打算在数据库上工作,则可能不需要这样做,但我仍然认为这是一个很好的做法。
我现在没有问题。你能做些什么来解决它?
您需要转到 my.ini(SQL 中的配置文件)并更改 MYISAM
default_tmp_storage_engine=MYISAM
至
default-storage-engine=InnoDB
感谢大家的帮助!
昨天我删除了我的数据库表,因为我需要将 latin1_swedish_ci 更改为 utf8_general_ci 以便在我的应用程序中使用波兰语。在那之后我不能完全迁移我的数据库,因为我有这样的问题:
(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。当我启动服务器时它运行,但 social-django 不工作。只有那个应用无法迁移。
祝一切顺利, 丁森
免责声明:我不是这方面的专家,我只是陈述我目前的做法,这里的建议只是建议 最终你决定是否要使用它。
让我们尝试解决问题,在您的终端中输入:
mysql -u root
- 然后在您进入
mysql
监视器后,您可以通过输入SHOW_DATABASE;
检查您的 - 如果数据库还在,用
DROP DATABASE fastandbeauty;
删除它
- 然后通过键入
CREATE SCHEMA fastandbeauty DEFAULT CHARACTER SET utf8
重新创建并创建一个新的新数据库,如果一切正常,监视器应该省略一条消息Query OK, 1 row affected (0.00 sec)
,之后您可以再次键入SHOW_DATABASE
和查看数据库是否存在 - 通过键入
\q
离开 - 那么你可以
python manage.py migrate
fastandbeauty
数据库是否仍然存在
mysql monitor
应该会创建一个新的 fastandbeauty database
,您可以继续处理它。
现在一些未来的参考:
我建议您不要在本地生产中使用您的开发数据库,这样您就不会遇到需要手动 create/delete 您的数据库的情况。
因此您可以 dump 将您的数据放入一个文件中,您可以使用该文件存储一些数据以供本地开发。如何使用它?
那么你可以创建新的 git branch
并将其命名为 local-dev-task-12
,这样你将来会在这个分支上工作,然后你可以只为这个分支创建新的数据库并调用数据库 fast_and_beauty12
,只需执行我已准备好在 migration
、cd
之前解释的步骤,将其放入您保存 dump file
的文件夹中,首先:
mysql -u root -p fast_and_beauty_12 < DumpFastAndBeauty.sql
- 这会将您的数据转储到新的fast_and_beauty_12
创建的数据库中- 进入您的
setting db
文件并将数据库名称更改为您创建的新数据库名称,这样fastandbeauty
>>fast_and_beauty12
这样您就可以使用它了 - 然后你去做
python manage migrate.py
有了这个,您将拥有一个新的 git branch
数据库,您可以在您的数据库上工作,而不必担心对 dev
数据库造成伤害。
注意:
您不会从该分支提交新的 migration
文件,因为这会使事情变糟,您会 git stash。他们为未来的工作。
在你隐藏 migrations
文件后回到 setting.py
并把你的名字 local database
改成你的 development database
名字所以 fast_and_beauty12
到fastandbeauty
,将新更改迁移到 development branch
,您可以
python manage.py migrate
,这样应该会用新数据填充您 development database
。
这个想法是每次为本地开发创建新分支时都有新的工作数据库,一开始有点混乱,但一段时间后你会理解它,并开始更频繁地这样做。如果您不打算在数据库上工作,则可能不需要这样做,但我仍然认为这是一个很好的做法。
我现在没有问题。你能做些什么来解决它?
您需要转到 my.ini(SQL 中的配置文件)并更改 MYISAM
default_tmp_storage_engine=MYISAM
至
default-storage-engine=InnoDB
感谢大家的帮助!