django mysql 编码_Django使用 Mysql数据库查询时乱码解决

在使用Django与MySQL数据库交互时遇到UnicodeDecodeError,错误指出'ascii'编码无法解码字节0xe6。问题根源是MySQL的编码设置。通过将数据库校对规则从utf8_bin更改为utf8_general_ci解决了此问题。提示了ci表示大小写不敏感,bin则区分大小写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TemplateSyntaxError at /admin/auth/group/

Caught DjangoUnicodeDecodeError while rendering: 'ascii' codec can't decode byte 0xe6 in position

0: ordinal not in range(128). You passed in (

.models.Group'>)

Request Method: GET

Request URL: http://127.0.0.1:8000/admin/auth/group/

Django Version: 1.3

Exception Type: TemplateSyntaxError

Exception Value:

Caught DjangoUnicodeDecodeError while rendering: 'ascii' codec can't decode byte 0xe6 in position 0:

ordinal not in range(128). You passed in (

auth.models.Group'>)

Exception Location: D:\opt\Python27\lib\site-packages\django\utils\encoding.py in force_unicode, line 93

Python Executable: D:\opt\Python27\python.exe

Python Version: 2.7.2

..................

使用的是django自带的模块,应该不会有问题。而且同样的代码在Sqlite3下运行正常,就此判断可以得出应该是Mysql的编码问题。

在创建数据的时候的编码是utf-8的,数据库校对规则为utf8_bin,改成utf8_generial_ci后就正常了。

附:

引用

校对规则一般有这些特征:

·         两个不同的字符集不能有相同的校对规则。

·         每个字符集有一个默认校对规则。例如,latin1默认校对规则是latin1_swedish_ci。

·         存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。

引用

ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的;

bin 是二进制, a 和 A 会别区别对待.

例如你运行:

SELECT * FROM table WHERE txt = 'a'

那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 则可以.

0

1

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-09-20 13:56

浏览 4293

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值