Ruby on rails - 排序规则,因此排序不能在 postresql 中正常工作



我正在开发一个rails应用程序,它的内容是土耳其语。我使用Postgresql9.2.2作为我的数据库后端。除了正确的排序外,一切都很好(没有奇怪的字符问题等)。

例如,当我试图列出一些按所在城市订购的商品时,我会期望像"阿达纳、布尔萨、伊斯坦布尔、吉雷松、宗古尔达克……"这样的商品。

相反,我总是在列表的末尾/开头添加特定于土耳其语的字符。(即"阿达纳、布尔萨、吉雷松、宗古尔达克、伊斯坦布尔")

我已经用命令initdb /usr/local/var/postgres -E utf8 --locale=tr_TR 初始化了我的postgres数据库

当我在psql控制台中l时,我得到了预期的。

 Name              Owner         Encoding   Collate   Ctype
 ----------------+-------------+----------+---------+-------+ 
 app_development | app         | UTF8     | tr_TR   | tr_TR |
 app_production  | app         | UTF8     | tr_TR   | tr_TR |
 app_test        | app         | UTF8     | tr_TR   | tr_TR |
 postgres        | monkegjinni | UTF8     | tr_TR   | tr_TR |

我还尝试使用LC_CTYPE="tr_TR.UTF-8"LC_COLLATE="tr_TR.UTF-8"手动创建数据库,但再次没有进展。

关于我的开发环境的一些信息:

  • Running Mountain Lion 10.8.2与Macbook Pro 7.1

  • psql --version:9.2.2

  • rails --version:3.2.11

$ locale:

  • LANG="tr_tr.UTF-8"
  • LC_COLLATE="tr_tr.UTF-8"
  • LC_CTYPE="tr_tr.UTF-8"
  • LC_MESSAGES="tr_tr.UTF-8"
  • LC_MONETARY="tr_tr.UTF-8"
  • LC_NUMERIC="tr_tr.UTF-8"
  • LC_TIME="tr_tr.UTF-8"
  • LC_ALL=

如何解决此问题?

OSX上的UTF-8区域设置已损坏。您可以尝试使用非UTF-8语言环境(tr_tr.ISO8859-9),但它在这方面似乎也被破坏了。所以这是行不通的。