zoukankan      html  css  js  c++  java
  • Flask虚拟环境连接mysql出现1366的解决方案

    报错信息

    Warning: (1366, "Incorrect string value: 'xD6xD0xB9xFAxB1xEA...' for column 'VARIABLE_VALUE' at row 518
    自己遇到了这个问题,然后基本上把stackflow和所有博客上的解决方案都操作了一遍,在这里整理一下希望能帮助到更多的同学。

    解决方法

    首先放上flask连接数据库的代码:

    app = Flask(__name__)
    app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:password@127.0.0.1:3360/movie"
    app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
    

    遇到这个问题,一般上是编码问题,所以可以通过以下方法检查编码问题:
    1.确认mysql数据库编码没问题:找到mysql安装目录,打开my.ini配置文件,检查default-character-set是否为utf8
    2.再排除pycharm编码没问题:pycharm>>settting>>editor>>file encodings是否为utf8
    3.通过命令行能进入mysql但是代码不能进入mysql,可能是连接方式的编码问题

     show variables like 'character%';  ——查看所有编码方式
    
     show create table table_name;   ——查看某个表格的编码方式
    
     status  ——查看
    

    查看并修改mysql的编码方式,haracter_set_client为客户端编码方式;character_set_connection为建立连接使用的编码;character_set_database数据库的编码; character_set_results结果集的编码; character_set_server数据库服务器的编码; 只要保证以上四个采用的编码方式一样,就不会出现乱码问题。更具体的可以看这篇解答和这篇博客

    都不行的话,可能编码方式没有问题,但是是实驱动的问题,解决办法如下:
    具体如下:
    1,在虚拟环境中安装
    pip install mysql-connector

    2.修改

    app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://root:mysql@127.0.0.1:3306/goods"
    为
    
    app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+mysqlconnector://root:mysql@127.0.0.1:3306/goods"
    

    如果代码上没有问题的话,基本不可能是其他问题了。如果连接的时候显示:
    authentication plugin 'caching_sha2_password'
    这是加密方式有问题,看了stackflow上的一些解答,有这几种方法:
    1.将环境安装为python3.6,因为3.5及以下版本不支持mysql的'caching_sha2_password'方法
    2.通过

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
    
    flush privileges;
    

    查看数据加密方式的命令为:select host,user,plugin from mysql.user;

    将所有的数据表变成这样:

    mysql> select host,user,plugin from mysql.user;
    
    +-----------+------------------+-----------------------+
    
    | host      | user             | plugin                |
    
    +-----------+------------------+-----------------------+
    
    | %         | yun              | mysql_native_password |
    
    | localhost | mysql.infoschema | mysql_native_password |
    
    | localhost | mysql.session    | mysql_native_password |
    
    | localhost | mysql.sys        | mysql_native_password |
    
    | localhost | root             | mysql_native_password |
    
    +-----------+------------------+-----------------------+
    
    5 rows in set (0.00 sec)
    

    3.reconfigure mysql server,进入mysql的安装界面,点击reconfigure将mysql的加密方式变为USE LEGACY..的加密方式就OK了
    笔者试了所有的方法,最后一种才奏效,仅供参考。

  • 相关阅读:
    javascript之DOMReady
    JQuery之proxy实现绑定代理
    javascript之数据推送
    javascript之高级函数应用思想
    函数的四种调用方式
    javascript多线程简介
    数组之迭代应用
    Git快速上手 : Tortoise工具使用
    Git 服务器搭建
    Git 安装与使用(二)
  • 原文地址:https://www.cnblogs.com/yunlambert/p/9503788.html
Copyright © 2011-2022 走看看