開發的程序在個人本地mac上,ubuntu上,以及樹莓派上都成功實現了遷移和運行,可是當準備將運行好好地程序遷移到阿里雲的服務器上的mysql數據庫上時,出現了很是多的幺蛾子的問題。node
具體以下:python
初始化鏈接,執行python manage.py makemigrations; python manage.py migrate 生成部分表格(不全),報錯。報錯信息以下:mysql
因爲全部的報錯信息都是django的內部信息,沒法判斷具體錯誤在哪一段代碼上。在網上找了各類資料,mysql版本等多種問題均未不是我想要的解決方案,由於自己確認沒問題。react
又趕上了Django從1.11.7升級到2.0的狀況,看誰都像壞人。只能耐心地將django版本庫升級到最新版後,將系統跑起來。在樹莓派上測試仍是ok,阿里雲仍是死。。。sql
後面又是逐步調整,把可能的全部的對象都搞了一遍,沒有定位到錯誤。最後選擇新建一個新的django項目,將models中的表一張張移過來,立刻發現varchar(256)改爲255後就能夠成功運行了。終於找到了問題所在。後面就是調試定位具體的緣由。數據庫
下面的代碼是models.py中的兩個varchar(256)的表。django
from django.db import models # Create your models here. class Company(models.Model): '''公司表''' company_name=models.CharField(max_length=256,verbose_name='公司名稱') industry=models.CharField(max_length=32,verbose_name='所屬行業',blank=True,null=True) department=models.CharField(max_length=32,verbose_name='所屬部門',blank=True,null=True) def __str__(self): return self.company_name class Meta: verbose_name='公司表' verbose_name_plural='公司表' class Tags(models.Model): '''標籤表''' tag_name=models.CharField(max_length=256,verbose_name='標籤名稱') shadow_mark_id=models.IntegerField(verbose_name='影子標籤',blank=True,null=True) node_ancestor=models.ForeignKey('self',verbose_name='父節點',blank=True,null=True,on_delete=True) def __str__(self): return self.tag_name class Meta: unique_together=('tag_name','node_ancestor') verbose_name='標籤表' verbose_name_plural='標籤表'
逐步調整,最終發現,Company表中的varchar(256)也不會出錯。最後的緣由在於在Tags中,tag_name這個字段作了一個聯合惟一, 阿里雲對mysql索引作了限制,索引的長度不能超過255。ubuntu
這就是一個字引起的血案。服務器