您的位置:首页 > 编程语言 > Go语言

Django的admin管理系统写入中文出错的解决方法

2017-07-17 00:00 453 查看
摘要: 数据库编码问题解决方法

Django创建的网站,数据库为mysql会经常出现管理网页录入中文出错的问题,

一般会有这样的反馈:Incorrect string value ‘\x32\xf4\xAE’

出现这种问题不要慌,一看反馈就知道是编码问题,但是会是什么编码问题呢,一般将数据库mysql换成django自带的数据库SQLIT就不会出现这种问题,我已我们将目标锁定在数据库mysql上,我们可以利用mysql人机交互软件MySQLWorkbench



或者直接利用终端登录mysql进行查看

利用代码:

show variables like'%char%'

查看Mysql配置的编码:(下图是本人的编码配置,是我修改后的配置,我的Mac机器安装的时候character_set_server 是latin1格式的)



所以我们要更改一下其配置编码,重点能容如下:

1.关闭本地的Mysql服务(有两种方式)

通过系统偏好设置,找到最下变得Mysql图标



点进去之后选择Stop MySQL Server



通过代码:

sudo /usr/local/mysql/support-files/mysql.server stop


2. 修改mysql配置文件

Mac 上没有其配置文件/etc/my.cnf 需要我们从mysql安装地点我的是:/usr/local/mysql-5.7.17/的support-files/的my-default.cnf拷贝一份出来命名为my.cnf,内容我们修改为:

# Example MySQL config file for small systems.
#
# This is for a system with little memory (<= 64M) where MySQL is only used
# from time to time and it's important that the mysqld daemon
# doesn't use much resources.
#
# MySQL programs look for option files in a set of
# locations which depend on the deployment platform.
# You can copy this option file to one of those
# locations. For information about these locations, see:
# http://dev.mysql.com/doc/mysql/en/option-files.html #
# In this file, you can use all long options that a program supports.
# If you want to know which options a program supports, run the program
# with the "--help" option.

# The following options will be passed to all MySQL clients
[client]
default-character-set=utf8
#password   = your_password
port        = 3306
socket      = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci
port        = 3306
socket      = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
#
#skip-networking
server-id   = 1

# Uncomment the following if you want to log updates
#log-bin=mysql-bin

# binary logging format - mixed recommended
#binlog_format=mixed

# Causes updates to non-transactional engines using statement format to be
# written directly to binary log. Before using this option make sure that
# there are no dependencies between transactional and non-transactional
# tables such as in the statement INSERT INTO t_myisam SELECT * FROM
# t_innodb; otherwise, slaves may diverge from the master.
#binlog_direct_non_transactional_updates=TRUE

# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /usr/local/mysql/data
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/mysql/data
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 16M
#innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates

[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
interactive-timeout

主要的修改是:

[client]部分加入:

default-character-set=utf8

[mysqld]部分加入:

character-set-server=utf8

如果是通过vi 修改的cnf文件不要忘了wq保存。

3.最后一步重启MySQL服务

终端输入 :mysql -u root -p 然后输入你数据库的密码

进入以后进行一下的操作

4. 删除之前的数据库

把之前的数据库需要的数据,重要的保存一下,然后删除掉

5. 重新创建一个UTF-8编码的数据库

CREATE DATABASE <数据库名称> DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


6. 同步数据库

python3 manage.py makemigrations

python3 manage.py migrate


最后登陆一下后台查看插入中文字符后成功的样子吧。

注:

如果Mysql密码忘记,重置密码请查看这个链接:忘记密码的情况下修改MySQL的密码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: