Sqlite3 domyślnie sortuje tylko litery ASCII. Próbowałem szukać w Google, ale jedyną rzeczą, którą znalazłem były informacje o collations. Sqlite3 ma tylko sortowania NOCASE
, RTRIM
i . Jak dodać obsługę dla określonych ustawień narodowych? (Używam go w aplikacji Rails)Jak posortować tekst w sqlite3 przy użyciu określonych ustawień narodowych?
Odpowiedz
SQLite supports integracja z ICU. Zgodnie z plikiem Readme, katalog sqlite/ext/icu/README.txt
zawiera kod źródłowy dla rozszerzenia "ICU" SQLite, integrację biblioteki "International Components for Unicode" z SQLite.
1. Features
1.1 SQL Scalars upper() and lower()
1.2 Unicode Aware LIKE Operator
1.3 ICU Collation Sequences
1.4 SQL REGEXP Operator
przyjąłem Doug Currie odpowiedź, ale chcę dodać trochę „algorytm”, jak to zrobić, ponieważ sqlite3 dokumentacja jest bardzo dziwne (przynajmniej dla mnie).
Ok, mamy sqlite3 pracę i teraz:
skompilować:
gcc -shared icu.c `icu-config --ldflags` -o libSqliteIcu.so
Jest dla systemu Linux. Musiałem także zainstalować dodatkowy pakiet rozwojowy ICU:
sudo apt-get install libicu-dev
pracuję na 64-bitowej architekturze i otrzymuję błąd z
__relocation R_X86_64_32S__
(cokolwiek to znaczy :). GCC zasugerowało dodanie-fPIC
do kompilacji opcji i pomogło.Uruchom sqlite3. Możemy załadować rozszerzenie poleceniem:
.load './libSqliteIcu.so'
Zakładając, że znajduje się on w katalogu bieżącym, możemy również podać całą ścieżkę.
Utwórz nowe sortowania:
SELECT icu_load_collation('pl_PL', 'POLISH');
pożądany jest pierwszy parametr locale a drugi to (może być cokolwiek).
Teraz możemy posortować dane z naszej nowej lokalizacji:
SELECT * FROM some_table ORDER BY name COLLATE POLISH;
I to jest sprawa niewrażliwe!
Jeśli nie możesz sobie pozwolić na kompilację rozszerzenia ICU, możesz zrobić to samo z UDF. W PHP/PDO:
$pdo->sqliteCreateFunction('locale',
function ($data, $locale = 'root')
{
static $collators = array();
if (isset($collators[$locale]) !== true)
{
$collators[$locale] = new \Collator($locale);
}
return $collators[$locale]->getSortKey($data);
}
);
Przykład użycia:
SELECT * FROM "table" ORDER BY locale("column", 'pt_PT');
nie spodziewam się to podejście będzie tak skuteczny jak natywnego rozszerzenia ale na pewno jest bardziej mobilny.
- 1. Uzyskaj ciąg znaków z domyślnych ustawień narodowych za pomocą ciągu znaków w określonych ustawieniach narodowych
- 2. Android: jak uzyskać ciąg znaków w określonych lokalizacjach BEZ zmiany bieżących ustawień narodowych
- 3. Jak sformatować daty na podstawie ustawień narodowych?
- 4. Przełącznik ustawień narodowych przy logowaniu się do FOSUserBundle
- 5. mvc3 jquery dyskretne sprawdzanie poprawności ustawień narodowych
- 6. Jak sformatować bieżącą datę dla ustawień narodowych użytkownika?
- 7. Formatowanie adresu na podstawie ustawień narodowych w Androidzie
- 8. Jak posortować tablicę przy użyciu minimalnej liczby zapisów?
- 9. przy użyciu właściwości Ustawienia dla ustawień aplikacji
- 10. Zapisywanie ustawień aplikacji qt przy użyciu QSettings
- 11. Usuwanie określonych plików przy użyciu Pythona
- 12. Zmiana ustawień BIOS przy użyciu języka C
- 13. Formatowanie daty na podstawie ustawień narodowych użytkownika na Androidzie
- 14. Zmiana ustawień narodowych: Wymuś aktywność, aby ponownie załadować zasoby?
- 15. Twig: pokaż nazwę miesięcy na podstawie bieżących ustawień narodowych
- 16. Dlaczego ustawienie ustawień narodowych nie naprawia tego UnicodeError?
- 17. Jak wstawić tekst przy użyciu XElement
- 18. Kwerenda DNS przy użyciu określonych serwerów DNS w .NET
- 19. Znajdowanie określonych ciągów w tablicy przy użyciu R
- 20. użyciu JavaScript, aby posortować tablicę tablic numerycznych
- 21. Uaktualnienie wersji sqlite3 przy użyciu Pythona 2.7.3 i pysqlite2 2.6.3
- 22. Jak narysować tekst w niestandardowym widoku przy użyciu Objective-C?
- 23. Jak zamienić tekst w plikach przy użyciu funkcji Gradle/Groovy
- 24. Wybieranie określonych kolumn przy użyciu funkcji mutate_each z dplyr
- 25. Reading sformatowany tekst przy użyciu Pythona
- 26. Dynamiczne ładowanie pliku ustawień regionalnych przy użyciu Requirejs
- 27. Jak posortować cyfry w liczbie?
- 28. Co to znaczy, że porównania łańcuchów i znaków w Swift nie są zależne od ustawień narodowych?
- 29. PyCharm 1.1 - korzystanie z określonych ustawień dla biegacza testu django
- 30. Metoda kakao, aby zwrócić listę wszystkich liter w alfabecie bieżących ustawień narodowych?
Pierwsze łącze jest teraz chronione hasłem. –