0
일부 독일어 단어는 "ß"문자를 포함합니다.SQLite 독일어 특수 문자
그러나 때때로 사람들은 "ss"라고 쓰고 그 반대도 마찬가지입니다. 완벽하게 합법적 인 것은 아니지만 이는 일반적인 관행입니다.
예를 들어 어떤 사람들은 "auer"라고 쓰고 어떤 사람들은 "ausser"라고 씁니다.
나는 이것을 SQLite DB에서 훌륭하게 처리하고 싶습니다.
그러므로 나는 사용자 정의 LATIN_NOCASE 조합을 만들었습니다,하지만 예상대로 작동하지 않습니다 :
나는 "außer"라는 단어를 삽입하고, 내가 "를 검색하면 수 있도록하고 싶습니다 s "또는"ss ".
그러나 내 선택은 결과를 반환하지 않습니다.
어디서 잘못 본 사람이 있습니까? 아래와 같은 비교가 충분합니까? 아니면 추가로 특별한 조치를 취해야합니까?
감사합니다.
Imports System.Data.SQLite
Imports System.Globalization
<SQLiteFunction(FuncType:=FunctionType.Collation, Name:="LATIN_NOCASE")> _
Public Class SQLiteCaseInsensitiveCollation
Inherits SQLiteFunction
Private Shared ReadOnly _cultureInfo As CultureInfo = CultureInfo.CreateSpecificCulture("de-DE")
Public Overrides Function Compare(x As String, y As String) As Integer
Return String.Compare(x, y, _cultureInfo, CompareOptions.IgnoreCase)
End Function
End Class
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
SQLiteFunction.RegisterFunction(GetType(SQLiteCaseInsensitiveCollation))
Dim c As New SQLite.SQLiteConnection("Data source=:memory:")
c.Open()
Using nCmd As SQLite.SQLiteCommand = c.CreateCommand
With nCmd
.CommandText = "CREATE TABLE foo (word TEXT COLLATE LATIN_NOCASE)"
.ExecuteNonQuery()
End With
End Using
Using nCmd As SQLite.SQLiteCommand = c.CreateCommand
With nCmd
.CommandText = "CREATE INDEX 'idx_foo_word' ON 'foo' (word COLLATE LATIN_NOCASE)"
.ExecuteNonQuery()
End With
End Using
Using nCmd As SQLite.SQLiteCommand = c.CreateCommand
With nCmd
.CommandText = "INSERT INTO foo (word) VALUES ('außer')"
.ExecuteNonQuery()
End With
End Using
Using nCmdSel As SQLite.SQLiteCommand = c.CreateCommand
With nCmdSel
.CommandText = "SELECT * FROM foo WHERE word LIKE '%ss%' COLLATE LATIN_NOCASE"
Using r As SQLite.SQLiteDataReader = .ExecuteReader
Do While r.Read
MsgBox(r("word"))
Loop
End Using
End With
End Using
End Sub
End Class
SQLite가 'LIKE'표현식과 데이터 정렬을 지원하는지/사용하는지 전혀 모르겠습니다. 그걸 확인하고 싶을 수도 있습니다. - 그리고 어떤 일반적인 상황에서도 "ß"는 어쨌든 독일어로 "s"로 변환됩니다. – JimmyB