问题: windows中,通过Django ORM创建数据表,MySQL中文乱码 问题原因: 字符集不匹配。 原因详情: windows中,默认字符集为gbk。 MySQL数据库中,默认字符集为latin1。 python代码中,默认字符集为utf8。 解决方法: 思路: 先将mysql中的当前默认字符集改为utf8后,再执行Django ORM操作。 为兼容表情包等富文本,将字符集改为utf8mb4。 操作步骤: 1.mysql操作 1.1登录mysq 在windows中,cmd进控制台。 输入命令:mysql -u root -p 输入mysql密码 1.2在mysql中,操作: 1) 查看mysql当前字符集编码 show variables like '%char%'; 2)修改mysql当前默认字符集 set 变量名 = 字符集名; set character_set_client=utf8mb4; set character_set_connection=utf8mb4; set character_set_database=utf8mb4; set character_set_results=utf8mb4; set character_set_server=utf8mb4; 执行set character_set_system=utf8mb4;时,会报错: ERROR 1238 (HY000): Variable 'character_set_system' is a read only variable不必紧张,不用修改此变量的字符集,继续操作,因它不会影响最终效果。 3)查看mysql修改后的字符集编码 show variables like '%char%'; 2.Django ORM操作 2.1切换到Django项目所在目录 2.2执行数据库迁移 python manage.py makemigrations python manage.py migrate 2.3运行Django服务器 python manage.py runserver 3.验证 在浏览器中打开测试url,添加含的中文字符的记录。 没有报错,表示此问题已解决。 方法利弊: 此方法为临时解决方法。 优点:操作简单,不修改MySQL数据库的配置文件,不停MySQL数据库,不修改原有数据库数据。 缺点:MySQL数据库重启后,MySQL默认字符集恢复为配置文件中配置的字符集。你需在更新数据库结构前,重复上述改MySQL默认字符集编码的操作。 风险:前提:数据库中原没有其他编码的数据,否则原数据如为Latin1,有可能无法正常显示,大概率是能正常显示的。这个,你可自行测试看看结果。 如果不幸这样,你也不用着急。在MySQL中,show create table 表名;查看原数据表的字符集。将MySQL默认字符集改为此字符集,就能解决这个问题。但中文这个就暂时解决不了了。 说明:为什么不直接改MySQL数据库的配置文件my.ini,因为我测试时遇到改了以下内容,MySQL服务就启动不起来的情况。 如果你有好的解决方法,欢迎留言告诉我。 character-set-server=utf8 default-character-set=utf8 #或