Django查询不考虑特殊字符

时间:2016-09-10 18:54:34

标签: mysql django character-encoding

我在django查询(Django 1.9.2)上遇到了特殊字符的问题。

我已经创建了一个存储单词的模型,我正在使用西班牙语词典中的单词为该模型提供服务,使用如下代码:

MyModel.objects.get_or_create(word=myword)

现在我已经意识到还没有添加包含特殊字符的单词,因此,例如,añoano数据库中只有一行MyModel!当我查询数据库时,我为这两个查询检索相同的对象:

MyModel.objects.get(word='año')
MyModel.objects.get(word='ano')

......不,这些话不一样; D

我当然希望为每个创建一个对象。

2 个答案:

答案 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ñoCOLLATION utf8_binutf8_spanish_ci。所有其他utf8排序规则都会utf8_spanish2_ci = n。 spanish2与西班牙语的不同之处在于ñ被视为单独的"字母"在chc之间。同样适用于dMore details

请注意其他'重音符号'除了utf8_bin之外,在大多数utf8排序规则的比较中都会被忽略。例如,ll = C(_bin和_turkish除外)。

相关问题