忍者ブログ
  • 2024.04
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 2024.06
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/05/04 05:31 】 |
SQLiteの照合順序について簡単なレポート
■照合順序の疑問
SQL Serverだとインスタンスを作成する際に照合順序の設定が出来た。
たとえばCI_とかだ。これを設定すると大文字小文字・半角全角・ひらがなカタカナが同一視されないようになった。

しかし、SQLiteだとどういう仕様なのかよくわかっていない。
本記事はこの仕様についてレポートする。


■公式サイトの記述
Datatypes In SQLite Version 3
https://www.sqlite.org/datatype3.html
以下のように記載がある
7. Collating Sequences
------------------------------------------------------
When SQLite compares two strings, it uses a collating sequence or collating function (two words for the same thing) to determine which string is greater or if the two strings are equal. SQLite has three built-in collating functions: BINARY, NOCASE, and RTRIM.

・BINARY - Compares string data using memcmp(), regardless of text encoding.
・NOCASE - The same as binary, except the 26 upper case characters of ASCII are folded to their lower case equivalents before the comparison is performed. Note that only ASCII characters are case folded. SQLite does not attempt to do full UTF case folding due to the size of the tables required.
・RTRIM - The same as binary, except that trailing space characters are ignored.

An application can register additional collating functions using the sqlite3_create_collation() interface.
------------------------------------------------------
意味わかんないなw翻訳しようw
------------------------------------------------------
SQLiteは2つの文字列を比較するとき、照合シーケンスまたは照合関数(同じものに対して2つの単語)を使用して、どちらの文字列が大きいか、または2つの文字列が等しいかどうかを判断します。 SQLiteには、BINARY、NOCASE、およびRTRIMという3つの組み込み照合関数が組み込まれています。

・BINARY - テキストのエンコーディングに関係なく、memcmp()を使用して文字列データを比較します。
・NOCASE - バイナリと同じですが、ASCIIの26文字の大文字は、比較が実行される前に同等の小文字に変換されます。 ASCII文字だけが大文字に変換されることに注意してください。 SQLiteは、必要なテーブルのサイズのために完全なUTFの大文字小文字の変換を試みません。
・RTRIM - バイナリと同じですが、末尾のスペース文字は無視されます。

アプリケーションは、 sqlite3_create_collat​​ion()インタフェースを使用して追加の照合関数を登録できます。
------------------------------------------------------


■まとめ
・BINARYはメモリ照合。大文字小文字半角全角ひらがなカタカナは同一視しないっすよ
・大文字小文字は全部小文字にして比較する(大文字小文字は同一視しますよ)
・メモリ照合だけど、末尾スペースは切り取るよ
ってことね。

ちなみにBINARYがデフォルトだから、
大文字小文字半角全角ひらがなカタカナが同一視される心配は無いということだ。


■補足1 BINARYがデフォルトだとしている記述
7.1. Assigning Collating Sequences from SQL
Every column of every table has an associated collating function. If no collating function is explicitly defined, then the collating function defaults to BINARY. The COLLATE clause of the column definition is used to define alternative collating functions for a column.

7.1. SQLからの照合順序の割り当て
すべての表の各列には、関連する照合機能があります。 照合機能が明示的に定義されていない場合、照合機能のデフォルトはBINARYになります。 列定義のCOLLATE句は、 列の代替照合関数を定義するために使用されます。


■補足2 LIKEについての注意点
……と思ったら=だと同一視されなかったんですが、やっぱりLIKEだと大文字小文字は同一視されるみたい……。サンプルプログラムを作ってテストしたから間違いない。
恐らくLIKEの仕様なんだろう(投げやり)。ま、=さえちゃんと効けば問題ないさ。


■書くときに参考にしたサイト
Django と SQLite/MySQL : 照合順序を意識しよう
http://hideharaaws.hatenablog.com/entry/2015/03/17/160122
Datatypes In SQLite Version 3
https://www.sqlite.org/datatype3.html
PR
【2017/05/13 07:26 】 | ビット演算 | コメント(0)
<<[SQLite]え、SQLiteって副問い合わせで=使えないの? | ホーム | [C# SQLite]SQLiteってPRIMARY KEYにTEXT型は指定できないの?>>
コメント
コメント投稿














<<前ページ | ホーム | 次ページ>>