我在django查询(Django 1.9.2)上遇到了特殊字符的问题。
我已经创建了一个存储单词的模型,我正在使用西班牙语词典中的单词为该模型提供服务,使用如下代码:
MyModel.objects.get_or_create(word=myword)
现在我已经意识到还没有添加包含特殊字符的单词,因此,例如,año
和ano
数据库中只有一行MyModel!当我查询数据库时,我为这两个查询检索相同的对象:
MyModel.objects.get(word='año')
MyModel.objects.get(word='ano')
......不,这些话不一样; D
我当然希望为每个创建一个对象。
答案 0 :(得分:2)
之前我遇到过类似的问题,并且能够通过设置环境级变量来解决问题。
在生产级别Django的上下文中,我将其添加到wsgi.py
文件的顶部:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
我相信我从this answer找到了这个技巧。
答案 1 :(得分:1)
简短回答:你可能想要COLLATION utf8_spanish2_ci
。
答案很长:
如果您在相关列/表格中使用CHARACTER SET utf8
(或utf8mb4
),则和如果您需要ano
!= {{1} },您需要año
或COLLATION utf8_bin
或utf8_spanish_ci
。所有其他utf8排序规则都会utf8_spanish2_ci
= n
。 spanish2与西班牙语的不同之处在于ñ
被视为单独的"字母"在ch
和c
之间。同样适用于d
。 More details
请注意其他'重音符号'除了utf8_bin之外,在大多数utf8排序规则的比较中都会被忽略。例如,ll
= C
(_bin和_turkish除外)。