扫码关注官方订阅号
为什么我在django自带的admin管理站点上,修改admin账户属性的时候,不论写入中文还是英文或者什么都不做,就点击一下保存并继续都会出现 column 'change_messsage' 类的错误?
mysql的my.ini配置文件的数据库默认编码是utf8
报错信息如下:
最后在大家的帮助下,我终于顺利解决了问题。 特别感谢:@Titans 等
下面我讲一下到底是哪里出了问题
起初,我在settings.py里面是这样设置数据库信息的:
没错,我为了省事,直接使用了mysql自带的test数据库作为我的连接数据库了。 但是这会带来很多问题:比如test数据库默认编码并不是gbk这就导致它在支持中文输入上有很大缺陷!
我发现这一点后,修改了my.ini文件如下:
然后,我尝试重启数据库,再次修改admin账号信息,结果还是报一样的错 = =TMD
好吧,其实我也没想通过这么小小的修改就可以成功,接着,我在mysql>下用status查看了一下数据库状态:
原来这里还有一项(Db characterset)的默认编码方式为:latin1,这能忍?
我果断又用mysql> alter database test character set gbk; 把它修改成了gbk编码
mysql> alter database test character set gbk;
应该可以了!我又一次尝试重启了数据库,再再次修改我的admin账号信息,结果还是1366错误,= =CNMD
好吧,其实我以为刚才就好了,我明明已经修改了所有的编码方式,怎么还不行? ...过了若干个苦逼求学的小时以后,我发现可能是那些已经创建了的表单并不受刚才我修改的默认编码方式的影响导致我的问题不能得到解决,ok,那我就逐个修改已存在表单的编码方式:
用mysql> alter table 表单名 character set gbk;逐条修改,原谅我是新手不能写个脚本。
mysql> alter table 表单名 character set gbk;
这样应该没问题了吧? 我又又一次尝试重启了数据库, 再再次尝试修改我的admin账户信息,然后...然后还是1366错误,(╯‵□′)╯︵┻━┻
这时我忽然想起来,每张表内的字段字符集好像没有修改......,我怀着试一试的心态敲下了如下代码:
show full columns from django_site
注意这里每个字段的collation属性还是latin1
我**%#&¥FDDr6FD6f6sd&
我决定从新做人,自己建立了一个空白数据库,修改了它的全部默认编码方式都为:gbk
mysql> CREATE DATABASE liuhaobo;
由于我在该数据库没有任何表单的时候就修改了它的默认编码方式,所以,在之后的django自动为admin账户创建表单时,所有的编码都是gbk的如图:
最后也终于:
加入中文,英文 点击保存 成功了!!!!!!
我TMD以后再也不犯懒了好么
看起来像是数据库编码与表内编码及字段编码没有统一所导致的。
看着像数据库编码问题,可以试一下这个脚本
import MySQLdb host = "localhost" passwd = "" user = "root" dbname = "django" db = MySQLdb.connect(host=host, user=user, passwd=passwd, db=dbname) cursor = db.cursor() cursor.execute("ALTER DATABASE `%s` CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci'" % dbname) sql = "SELECT DISTINCT(table_name) FROM information_schema.columns WHERE table_schema = '%s'" % dbname cursor.execute(sql) results = cursor.fetchall() for row in results: sql = "ALTER TABLE `%s` convert to character set DEFAULT COLLATE DEFAULT" % (row[0]) cursor.execute(sql) db.close()
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
最后在大家的帮助下,我终于顺利解决了问题。
特别感谢:@Titans 等
下面我讲一下到底是哪里出了问题
没错,我为了省事,直接使用了mysql自带的test数据库作为我的连接数据库了。
但是这会带来很多问题:比如test数据库默认编码并不是gbk这就导致它在支持中文输入上有很大缺陷!
我发现这一点后,修改了my.ini文件如下:
然后,我尝试重启数据库,再次修改admin账号信息,结果还是报一样的错 = =TMD
好吧,其实我也没想通过这么小小的修改就可以成功,接着,我在mysql>下用status查看了一下数据库状态:
我果断又用
mysql> alter database test character set gbk;把它修改成了gbk编码
应该可以了!我又一次尝试重启了数据库,再再次修改我的admin账号信息,结果还是1366错误,= =CNMD
好吧,其实我以为刚才就好了,我明明已经修改了所有的编码方式,怎么还不行?
...过了若干个苦逼求学的小时以后,我发现可能是那些已经创建了的表单并不受刚才我修改的默认编码方式的影响导致我的问题不能得到解决,ok,那我就逐个修改已存在表单的编码方式:
用
mysql> alter table 表单名 character set gbk;逐条修改,原谅我是新手不能写个脚本。这样应该没问题了吧?
我又又一次尝试重启了数据库,
再再次尝试修改我的admin账户信息,然后...然后还是1366错误,(╯‵□′)╯︵┻━┻
这时我忽然想起来,每张表内的字段字符集好像没有修改......,我怀着试一试的心态敲下了如下代码:
我**%#&¥FDDr6FD6f6sd&
我决定从新做人,自己建立了一个空白数据库,修改了它的全部默认编码方式都为:gbk
由于我在该数据库没有任何表单的时候就修改了它的默认编码方式,所以,在之后的django自动为admin账户创建表单时,所有的编码都是gbk的如图:
最后也终于:
我TMD以后再也不犯懒了好么

看起来像是数据库编码与表内编码及字段编码没有统一所导致的。
看着像数据库编码问题,可以试一下这个脚本