解决Django向MySQL写入中文字符报错:修改字符集与重建数据库详解
本文详细记录了Django项目中向MySQL写入中文字符报错的解决方案。主要步骤包括修改MySQL配置文件my.cnf设置utf8字符集,验证字符集变量,以及关键的重建数据库操作。通过新建数据库并执行makemigrations和migrate命令,确保表结构支持中文,从而彻底解决写入错误问题。
Django MySQL中文写入报错原因
在使用Django结合MySQL构建网站时,向数据库写入中文字符常会引发报错。即便尝试修改了settings文件及数据表的字符集,问题仍未解决。最终确认,在更改MySQL字符集后,必须重建数据库才能生效。
以下是完整的解决方案记录。
修改MySQL字符集配置
第一步是修改MySQL的字符集设置。
在Ubuntu系统中,找到/etc/mysql/my.cnf文件,并在末尾添加以下配置:
[mysqld] character-set-server=utf8 [client] default-character-set=utf8 [mysql] default-character-set=utf8
使用命令mysql -h localhost -u root -p进入MySQL命令行界面。
接着执行show variables like 'character_set%';查看字符集设置。若看到client、server、database的值均为utf8,则说明配置成功。
重建数据库与迁移步骤
然而,此时Django仍可能报错,因此需要重建数据库。若数据库数据量不大,重建的工作量其实非常小。
首先建立一个新的数据库,其默认编码格式即为utf8,已支持中文。
然后,修改settings.py中database项的name字段,指向新创建的数据库名。
最后,在包含manage.py的目录下执行数据库迁移命令。
python manage.py makemigrations
python manage.py migrate
这将创建用户表及models中自定义的表格,表结构与之前相同。随后将数据复制到新表中即可。
补充:另一种解决思路【慎用】
补充知识:解决Django字符集输入汉字后MySQL数据库报错的问题【慎用】
解决思路如下:
启动MySQL数据库,执行命令net start mysql。
随后运行:mysql -u root -p。
查看数据库字符集,执行show variables like ‘character%';。
发现character-set-server和character_set_database的值为latin1。
解决方案如下:
编辑查看MySQL文件夹下的my.ini配置文件。
在[mysqld]下添加character-set-server=utf8。
执行systemctl restart mysql重启MySQL Server,再次查看字符集变量,发现已变为utf8。
执行drop database 【已经添加的数据库】并create database 【新数据库】。
问题即可解决!
此方法简单直接,但需谨慎使用!因为数据库内的文件需要重写,较为麻烦。不过,可以在创建数据库后,添加一条数据,利用自定义的Django图形化界面再添加其他数据。
以上这篇解决Django向MySQL写入中文字符出错的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









