zoukankan      html  css  js  c++  java
  • django 保存中文到mysql 报错django.db.utils.DatabaseError: Incorrect string value: 'xE5xBEx88xE7x81xB5

    分析:

    1.尝试在Python中对数据转码成utf8,'中文'.encode("utf-8"),还是报错 

    2.观察堆栈发现应该是操作mysql数据库的时候,将数据插入表里出错

    所以第一种方式排除;集中从第二种原因找突破:

    在mysql中查看字符相关的变量:

    发现character_set_database 编码是latin1不是utf8,问题应该就在这里。

    那我们现在就要把这个字符改过来。

    这里注意:你们其他变量名的值也不是utf8,这里是你们my.ini配置文件里没有设置,mysql就用的是默认值

    [client] 

    default-character-set =utf8

    [mysql] 

    default-character-set =utf8

    [mysqld]

    collation-server = utf8_unicode_ci
    init_connect ='SET NAMES utf8'
    character_set_server=utf8

    其中:

    init_connect ='SET NAMES utf8' 相当于把charact_set_client ,character_set_server,character_set_connection都设置成utf8了,我怕到时又出啥问题就没去掉了。

    我也尝试了在[mysqld]下

    添加:character_set_database =utf8 可是启动mysql服务的时候报错。查找资料跟mysql的版本有问题,我mysql的版本是5.6.*

    那就只有通过mysql的命令去修改编码了:

    set character_set_database=utf8;

    在查看的时候编码就修改了

    再次测试代码后发现还是有问题。

    然后查看了下django连接的数据库,以及生成的表的编码发现编码不是utf8,所以这里还要修改数据库,表的编码

    a)查看数据库的编码:show create database databaseName;
    b)修改数据库编码: alter database databaseName default character set utf8 collate utf8_general_ci;
    a)查看建表的编码:show create table tableName;

    修改后查看编码都已经是utf8了应该不会有错了。果然测试可以了。

    下面附上mysql的一些相关命令:

    通过MySQL命令行修改:
      set character_set_client=utf8;
      set character_set_connection=utf8;
      set character_set_database=utf8;
      set character_set_results=utf8;
      set character_set_server=utf8;
      set character_set_system=utf8;
      set collation_connection=utf8;
      set collation_database=utf8;
      set collation_server=utf8;
    修改数据库字符集:
         ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
         如:
         ALTER TABLE test CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
         修改表的默认字符集:
         ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
         如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
         修改字段的字符集:
         ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
         如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
  • 相关阅读:
    kakfa 入门
    Spring Boot maven构建——阿里云Maven仓库地址
    MongoDB入门一
    MongoDB入门
    mybatis 一对一、一对多、多对一、多对多
    springboot集成druid数据源并且监控
    java 过滤表情符号
    Mybatis框架
    表单(一)
    HTML标签(二)
  • 原文地址:https://www.cnblogs.com/luozeng/p/8533458.html
Copyright © 2011-2022 走看看