本地Python2.7.14+Django1.11连外部MySQL5.1报innodb_strict_mode未知错误
解决Django 1.11连接MySQL 5.1时的
Unknown system variable 'innodb_strict_mode'错误 嘿,你猜得完全没错!这个问题就是外部MySQL 5.1版本太老导致的——咱们来拆解一下原因:
Django 1.11的MySQL数据库后端,默认会在连接初始化时尝试设置innodb_strict_mode=ON这个系统变量,用来确保InnoDB的严格模式。但问题是,innodb_strict_mode是从MySQL 5.5.5才正式引入的,MySQL 5.1根本没有这个变量,所以一执行这个命令就会报错。
下面给你两个靠谱的解决办法:
方法一:修改Django数据库配置,跳过innodb_strict_mode设置
直接在你的数据库配置中添加OPTIONS参数,指定自定义的初始化命令,同时让Django适配老版本MySQL。修改后的配置大概是这样:
'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'Mfg', 'USER': 'arastra', 'PASSWORD': '你的数据库密码', # 补充你的实际密码 'HOST': '外部MySQL的IP/域名', # 比如xxx.xxx.xxx.xxx 'PORT': '3306', # 外部MySQL的端口,默认3306 'OPTIONS': { # 指定初始化命令,用STRICT_TRANS_TABLES替代innodb_strict_mode的约束作用 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8', # 如果遇到编码问题,可开启unicode支持(Django1.11默认已开启) # 'use_unicode': True, }, }
这个配置会让Django在连接时只设置sql_mode='STRICT_TRANS_TABLES',而不会去碰innodb_strict_mode,完美适配MySQL 5.1。
方法二:降低mysqlclient版本(如果方法一无效)
如果修改配置后还是报错,可能是你用的mysqlclient版本太高,对MySQL 5.1的支持不够友好。Python 2.7+Django 1.11搭配mysqlclient==1.3.14是对老MySQL版本兼容性最好的组合,你可以执行以下命令降级:
pip uninstall mysqlclient pip install mysqlclient==1.3.14
完成后再运行python manage.py runserver试试,应该就能正常连接了。
内容的提问来源于stack exchange,提问作者Kaison
相关产品推荐
相关产品推荐

