Sqlite3 theo mặc định chỉ sắp xếp theo chữ cái ascii. Tôi đã cố gắng tìm trong google, nhưng điều duy nhất tôi tìm thấy là thông tin về collations. Sqlite3 chỉ có NOCASE
, RTRIM
và BIARY
đối chiếu. Làm thế nào để thêm hỗ trợ cho một miền địa phương cụ thể? (Tôi đang sử dụng nó trong ứng dụng Rails)Cách sắp xếp văn bản trong sqlite3 với ngôn ngữ được chỉ định?
Trả lời
SQLite supports tích hợp với ICU. Theo tệp Readme, sqlite/ext/icu/README.txt
thư mục sqlite/ext/icu/
chứa mã nguồn cho phần mở rộng "ICU" SQLite, một tích hợp của thư viện "Thành phần quốc tế cho Unicode" với 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
Tôi chấp nhận câu trả lời Doug Currie, nhưng tôi muốn thêm một số thuật toán "" cách thực hiện, vì tài liệu sqlite3 rất lạ (ít nhất là đối với tôi).
Ok, chúng tôi đã sqlite3 làm việc và bây giờ:
Biên dịch nó:
gcc -shared icu.c `icu-config --ldflags` -o libSqliteIcu.so
Nó là dành cho Linux. Tôi cũng cần phải cài đặt thêm gói phát triển ICU:
sudo apt-get install libicu-dev
Tôi đang làm việc trên kiến trúc 64 bit và tôi nhận được lỗi với
__relocation R_X86_64_32S__
(bất cứ điều gì nó có nghĩa :). GCC đã đề xuất thêm-fPIC
để biên dịch các tùy chọn và nó đã giúp.Chạy sqlite3. Chúng tôi có thể tải tiện ích mở rộng bằng lệnh:
.load './libSqliteIcu.so'
Giả sử rằng nó nằm trong thư mục hiện tại, chúng tôi cũng có thể chỉ định toàn bộ đường dẫn.
Tạo đối chiếu mới:
localeSELECT icu_load_collation('pl_PL', 'POLISH');
Tham số đầu tiên là mong muốn và thứ hai là nó (nó có thể là bất cứ điều gì).
Bây giờ chúng ta có thể sắp xếp dữ liệu với ngôn mới của chúng tôi:
SELECT * FROM some_table ORDER BY name COLLATE POLISH;
Và đó là trường hợp nhạy cảm!
Nếu bạn không đủ khả năng để biên dịch phần mở rộng ICU, bạn có thể có UDF cũng làm như vậy. Trong 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);
}
);
Ví dụ sử dụng:
SELECT * FROM "table" ORDER BY locale("column", 'pt_PT');
Tôi không mong đợi phương pháp này là hiệu quả như phần mở rộng tự nhiên nhưng nó là xách tay chắc chắn hơn.
- 1. Sắp xếp một dự án sử dụng nhiều ngôn ngữ?
- 2. Cách chỉ định ngôn ngữ trong API Google Maps?
- 3. sắp xếp dữ liệu văn bản lớn
- 4. @login_required đang mất ngôn ngữ được chỉ định hiện tại
- 5. Sắp xếp theo định dạng văn bản có thể đọc được của con người
- 6. Sắp xếp mảng Mảng đa điểm trên nhiều cột "cột" (khóa) với tùy chọn sắp xếp được chỉ định
- 7. WebDriver: Cách chỉ định ngôn ngữ ưa thích cho Chrome
- 8. Có cách nào để sắp xếp chuỗi bằng tất cả các ngôn ngữ không?
- 9. Vẽ văn bản đa ngôn ngữ bằng PIL
- 10. Hiệu quả nhận được các khoản được sắp xếp của một danh sách được sắp xếp
- 11. Làm cách nào để buộc nhật thực sử dụng ngôn ngữ giao diện được chỉ định?
- 12. Định dạng địa chỉ dựa trên ngôn ngữ trong android
- 13. Cách chỉ định 2 khóa trong python được sắp xếp (danh sách)?
- 14. Cách sắp xếp/sắp xếp dữ liệu trong Riak?
- 15. Hỗ trợ CTL (Ngôn ngữ văn bản phức tạp) trong Android
- 16. Process.Start chỉ định văn bản
- 17. Tập tin văn bản sắp xếp PHP (.txt) số
- 18. Làm cách nào để phát hiện ngôn ngữ của văn bản được người dùng nhập?
- 19. Có thể sắp xếp w/Văn bản có thể chọn
- 20. Căn chỉnh và sắp xếp văn bản tuyệt đối
- 21. làm thế nào để sắp xếp các văn bản trong CheckedTextView với hộp kiểm
- 22. Phonegap/Sencha Ngôn ngữ bản địa hóa
- 23. Datagrid trong WPF - 1 cột mặc định được sắp xếp
- 24. Iterator trong ngôn ngữ C
- 25. Chỉ tải một ngôn ngữ với require.js i18n
- 26. cách sử dụng lệnh Linux Sắp xếp để sắp xếp tệp văn bản theo cột thứ 4, thứ tự số?
- 27. Ngôn ngữ lắp ráp - Máy xếp
- 28. C# Ngôn ngữ được gõ động
- 29. Django: ngôn ngữ mặc định i18n
- 30. Ngôn ngữ trang web: sử dụng ngôn ngữ trình duyệt hoặc địa chỉ IP
Liên kết đầu tiên được bảo vệ bằng mật khẩu ngay bây giờ. –