2017-06-01 32 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