ubuntu中django项目无法上传中文到mysql中

在Ubuntu上,当尝试上传包含中文的数据到MySQL时遇到错误。通过检查发现是MySQL字符集配置问题。解决方案包括:1) 修改MySQL配置文件,将所有字符集设为utf8mb4;2) 重启MySQL服务;3) 删除并重新创建采用utf8mb4编码的数据库;4) 清除Django迁移历史并重新迁移;经过这些步骤,成功上传中文数据。然而,迁移后auth_user表未创建,影响创建超级用户。
摘要由CSDN通过智能技术生成

上传的数据中含有中文时,会出现如下错误:

1、查询得出是mysql字符集的问题,首先进入mysql中查看全局编码设置,如下:

show variables like 'char%';

mysql和字符集有关的变量
character_set_client:客户端请求数据的字符集
character_set_connection:从客户端接收到数据,然后传输的字符集
character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,那就使用 character_set_server指定的字符集,这个变量建议由系统自己管理,不要人为定义。

character_set_filesystem:把os上文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的
character_set_results:结果集的字符集
character_set_server:数据库服务器的默认字符集
character_set_system:这个值总是utf8,不需要设置,是为存储系统元数据的字符集

2、将所有字符集编码格式全部转化为utf8mb4

注:utf8mb4和utf8的区别  https://www.cnblogs.com/beyang/p/7580814.html

添加如下命令至mysql的配置文件  /etc/mysql/mysql.conf.d/mysqld.cnf

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
 

3、重启mysql,并查看字符集编码格式

systemctl restart mysql

完成这步以为就结束了,可以上传中文字符了,但结果悲剧还是不行,想了N久后,想到了现在使用的数据库的编码格式还是原来的没有变化。

4、在navicat可以查看到数据库的字符集和排序规则都还是原来之前的,一想数据不大,只是学习用,就把着数据库删除,重新创建,创建后的数据库字符集和排序规则都变成utf8mb4的。如下二图:

也可以使用sql命令查看

5、重新创建数据库后,执行迁移时需要先将app中的migrations中的之前迁移的数据删除,才能迁移成功。

如下图中的0001——initial.py文件删除

python manage.py makemigrations

python manage.py migrate

6、测试,上传成功!

 

还有一问题未解决:执行迁移后,并没有创建出auth_user的表,导致无法创建超级用户管理员。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值