使用DJANGO+MYSQL开发时,开启django admin, auth, 然后在后台界面添加中文,数据库保存成功,但是在查询时会报错:
使用的是django自带的模块,应该不会有问题。而且同样的代码在Sqlite3下运行正常,就此判断可以得出应该是Mysql的编码问题。
在创建数据的时候的编码是utf-8的,数据库校对规则为utf8_bin,改成utf8_generial_ci后就正常了。
附:[quote]
校对规则一般有这些特征:
· 两个不同的字符集不能有相同的校对规则。
· 每个字符集有一个默认校对规则。例如,latin1默认校对规则是latin1_swedish_ci。
· 存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。
[/quote]
[quote]
ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的;
bin 是二进制, a 和 A 会别区别对待.
例如你运行:
SELECT * FROM table WHERE txt = 'a'
那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 则可以.
[/quote]
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 <Group: [Bad Unicode data]> (<class 'django.contrib.auth
.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 <Group: [Bad Unicode data]> (<class 'django.contrib.
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后就正常了。
附:[quote]
校对规则一般有这些特征:
· 两个不同的字符集不能有相同的校对规则。
· 每个字符集有一个默认校对规则。例如,latin1默认校对规则是latin1_swedish_ci。
· 存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。
[/quote]
[quote]
ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的;
bin 是二进制, a 和 A 会别区别对待.
例如你运行:
SELECT * FROM table WHERE txt = 'a'
那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 则可以.
[/quote]