我作为一个语言的发言者,有几个非常见的字符,如ÕÜÖÄ,认为如果我创建一个允许用户将爱沙尼亚语内容保存到数据库的应用程序,那么这个应用程序也应该能够根据语言设定.
此外,作为非常小的语言的矛,像爱沙尼亚语一样,必须考虑,其他人可能会使用该应用程序并希望用他们的语言进行排序.几种欧洲语言也有自己的特殊字符组合.
更糟糕的是,如果你把俄语等语言包括在内 - 它们的角色完全不同.
既然我知道django网站可以很好地显示所有这些特殊字符,我只担心排序,这在数据库级别上.那么我怎样才能确保从数据库中读取对象并将其分类为正确的语言特定顺序.
示例案例:如果我使用utf8编码创建数据库并使用默认排序规则(英语utf8),那么表包含值
alan
oskar
ölen
älan
öskar
Run Code Online (Sandbox Code Playgroud)
将被排序(通过"从测试顺序中选择*由nimi asc;")到:
alan
älan
ölen
oskar
öskar
Run Code Online (Sandbox Code Playgroud)
这是不正确的.如果我使用POSIX排序规则创建数据库,则相同的查询结果为:
alan
oskar
älan
ölen
öskar
Run Code Online (Sandbox Code Playgroud)
这个SEEMS是正确的,如果你把更多的名字(õlan,ålan)扔进混合物,那么结果是:
alan
oskar
älan
ålan
õlan
ölen
öskar
Run Code Online (Sandbox Code Playgroud)
因为爱沙尼亚字母表,它们应该是:
alan
oskar
õlan
älan
ölen
öskar
ålan (cause å is not in estonian alphabet)
Run Code Online (Sandbox Code Playgroud)
我正在使用postgresql 9.1.9,我知道自9.1以来可以使用整理支持(http://www.postgresql.org/docs/9.1/interactive/collation.html).
那是我应该用的吗?
SELECT nimi COLLATE "et_EE" FROM test ORDER BY nimi ASC;
Run Code Online (Sandbox Code Playgroud)
失败并出现错误错误:用于编码"UTF8"的排序规则"et_EE.utf8"不存在.这是为什么?我是否必须创建此排序规则或其他内容?这是可行的方法 - 如果我希望结果的顺序正确,可以为每个查询指定排序规则吗?
艾伦
编辑:1回答问题:我的语言环境-a显示:
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN …Run Code Online (Sandbox Code Playgroud) Rails集合排序不适用于UTF-8字符串:
> University.order('abbr asc').map(&:abbr)
=> ["?", "?", "?"]
Run Code Online (Sandbox Code Playgroud)
它应该是
> University.order('abbr asc').map(&:abbr)
=> ["?", "?", "?"]
Run Code Online (Sandbox Code Playgroud)
我想念什么?
带有ruby 2.1.5p273的Rails 4.1.8(2014-11-13修订版48405)[x86_64-darwin14.0]
我有下表(在Oracle和PostgreSQL中创建并填充它们):
> create table foo (a varchar(10));
Run Code Online (Sandbox Code Playgroud)
我使用值填充它们,并且order by子句在PostgreSQL和Oracle中表现不同(我不认为版本与此问题相关):
甲骨文:
> select a, length(a) from foo order by a;
A LENGTH(A)
---------- ----------
.1 2
01 2
1 1
1#0 3
1#1 3
1.0 3
1.1 3
10 2
11 2
9 rows selected.
Run Code Online (Sandbox Code Playgroud)
我得到了我的期望..1之前01,因为.是0在ascii表之前.
但是,在PostgreSQL中我有:
=> select a, length(a) from foo order by a;
a | length
-----+--------
01 | 2
1 | 1
.1 | 2
10 | …Run Code Online (Sandbox Code Playgroud) 我正在使用Postgresql 9.4.5.当我去psql并运行\l我得到
Encoding is UTF8
Collate is en_US.UTF-8
cCtype is en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)
我的products表有一个name具有以下名称的列:
T-700A Grouped
T-700 AGrouped
T-700A Halved
T-700 Whole
Run Code Online (Sandbox Code Playgroud)
当我在pql中执行以下SQL时
SELECT name FROM products WHERE name LIKE '%T-700%' ORDER By name ASC;
Run Code Online (Sandbox Code Playgroud)
我得到以下输出
T-700A Grouped
T-700 AGrouped
T-700A Halved
T-700 Whole
Run Code Online (Sandbox Code Playgroud)
排序看起来并不自然.我期望得到
T-700 AGrouped
T-700 Whole
T-700A Grouped
T-700A Halved
Run Code Online (Sandbox Code Playgroud)
看起来Postgres似乎没有像我预期的那样处理空间.任何人都可以解释发生了什么,并建议一种解决方法吗?