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 等と同じ並びにするには > どのようにすれば良いか、どなたかご存じないでしょうか。 >