【问题标题】:Why does MySQL treat Japanese alphabets hiragana and katakana the same, and how can you make it compatible with Django?为什么 MySQL 将日文字母平假名和片假名一视同仁,如何使其与 Django 兼容?
【发布时间】:2017-05-26 17:25:17
【问题描述】:

这里已经部分解决了这个问题,但我想更具体地问一下:

MySQL difficulties - Hiragana and Katakana are treated as the same

日语有 2 个单独的拼音字母来描述同一组声音,而 MySQL 似乎以与处理大写和小写相同的方式处理这两个字母(所以我想,不是不区分大小写,而是不区分字母)。然而,这两个字母并不类似于英文大小写,所以这样做没有多大意义。有谁知道他们为什么选择这样做,并且很容易解决?更具体地说,当连接到 django 时,你会遇到这个问题:

>>> ichi = 'イチ' # This word is in katakana
>>> Dictionary.objects.get(word=ichi).word # The record that is returned is in hiragana
'いち' 
>>> Dictionary.objects.get(word=ichi).word == ichi # The words are not the same
False

有谁知道我怎样才能使行为保持一致?

【问题讨论】:

  • 是否可以选择为平假名/片假名设置两个数据库?更改数据库类型是一种选择吗?
  • 至于他们为什么选择这样做,链接问题上的this comment 似乎暗示它是作为特征的,因为这些词通常是相同的词和含义? “有时日语使用片假名来命名或强调 - 所以它们通常是相同的词和含义。”
  • 我看到了——虽然这是真的,但我想说的是,在大多数情况下,片假名/平假名的使用是经过深思熟虑和有意义的(片假名被指定用于外来词,而平假名则用于母语日语词)
  • 你真的使用 mysql 数据库而不是 Django 使用的默认 sqlite 数据库吗?我正在使用 MySQL,我没有这个问题,即在我的查询中,我能够得到区分 イチ 和 いち 的结果。如果您确定您使用的是 MySQL,请分享您的数据库相关设置(当然省略敏感信息)。

标签: mysql django


【解决方案1】:

这可能是因为当列字段设置为utf_general_ci时,MySQL将平假名和片假名视为相同。

将列排序规则更改为 utf_bin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 2012-06-08
    • 2015-04-24
    • 2013-09-19
    • 2021-05-15
    • 2018-04-26
    • 2021-07-18
    • 2020-04-08
    相关资源
    最近更新 更多