[Firebird-jp-general] order by の"ヴ"の並びについて

Zurück zum Archiv-Index

Junpei Kakehata panor****@af*****
2017年 1月 12日 (木) 14:11:36 JST


かけはたといいます。

selectで

  order by furigana collate unicode

と指定すれば、辞書順(ウ < ヴ < エ)での並び替えとなるようです。

ただしその場合はインデックスが利用されなくなると思うので、
フィールド定義のコレーションに "unicode" を指定してテーブルを
生成(またはデータベースのデフォルト文字コードセット・
コレーションを "utf-8", "unicode"にするとか)しておくと
いいと思います。

https://firebirdsql.org/refdocs/langrefupd25-collations.html

-- 
Junpei Kakehata <panor****@af*****>

On 2017/01/10 18:40, Hiroaki Kitahata wrote:
> 北畑と申します。
> 
> Firebird 2.1 で characterset が UTF8 の 
> furigana varchar(40) のようなフィル―ドを持つテーブルに対して
>   select * from TBL order by furigana
> というクエリを発行すると
> "ヴ" の文字はカタカナの後ろの方に並びます。
> (Firebird 3.0 でも同じ)
> 
> これを Excel 等で整列すると、"ヴ" は "ウ" の次に並びます。
> これは、windows API の CompareString 関数の動作から来ている
> ものと思います。(Delphi XE8 で実験)
>> Firebird だと アイウエオヴ の順
> Excel だと アイウヴエオ の順
> 
> どちらも仕様だと言えばそれまでのような気がしますが、
> プログラム中で、CompareString 関数を使ったソート処理を書いた場合は、
> order by での並びと異なることになってしまいます。
> (実際 Delphi の kbmMemTable というメモリ上のテーブルコンポーネントを
>   使っていて、MemTbl.SortOn('furigana', []); とすると、こうなります)
> 
> Firebird の oreder by の並びをExcel 等と同じ並びにするには
> どのようにすれば良いか、どなたかご存じないでしょうか。
> 




Firebird-jp-general メーリングリストの案内
Zurück zum Archiv-Index