2016-02-16 15 views
5

Tôi có một cơ sở dữ liệu (Mysql), trong đó tôi lưu trữ nhiều hơn 100 000 từ khóa với từ khóa bằng các ngôn ngữ khác nhau. Vì vậy, ví dụ nếu tôi có ba colums [id] [turkish (utf8_turkish_ci)] [german (utf8)]Mã hóa cơ sở dữ liệu đa ngôn ngữ trong công cụ tìm kiếm

Người dùng có thể nhập từ tiếng Đức hoặc tiếng Thổ Nhĩ Kỳ vào hộp tìm kiếm. Nếu người dùng nhập một từ Đức tất cả là tốt để nó in ra từ Thổ Nhĩ Kỳ nhưng làm thế nào để giải quyết nó với một Thổ Nhĩ Kỳ. Tôi hỏi vì mỗi ngôn ngữ có ký tự bổ sung của riêng mình như ä ü ö ş, vv

Vì vậy, tôi nên sử dụng

mb_convert_encoding 

để chuyển đổi chuỗi nhưng sau đó làm thế nào để kiểm tra xem nó là một chuỗi tiếng Đức hoặc tiếng tôi nghĩ rằng sẽ phức tạp. Hoặc là bảng mã của các bảng sai?

Bị mắc kẹt ngay bây giờ để làm thế nào để thực hiện nó vì vậy người dùng có thể nhập từ khóa của cả hai ngôn ngữ từ

+0

kiểm tra với UTF-8 –

Trả lời

0

Bạn có một vài vấn đề cần giải quyết để thực hiện công việc này một cách chính xác.

Đầu tiên, bạn đã chọn ký tự utf8 để giữ tất cả văn bản của mình. Đó là một lựa chọn tốt. Nếu đây là ứng dụng mới trong năm 2016, bạn có thể chọn bộ ký tự utf8mb4 thay thế. Khi bạn đã chọn một ký tự, người dùng của bạn sẽ có thể đọc được văn bản của bạn.

Thứ hai, để tìm kiếm và sắp xếp (WHEREORDER BY), bạn cần phải chọn một đối chiếu thích hợp cho từng ngôn ngữ. Đối với người Đức hiện đại, utf8_general_ci sẽ hoạt động tốt. utf8_unicode_ci hoạt động tốt hơn một chút nếu bạn cần đặt hàng từ điển chuẩn. Đọc này. http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html

Đối với tiếng Tây Ban Nha hiện đại, bạn nên sử dụng utf8_spanish_ci. Đó là bởi vì trong tiếng Tây Ban Nha, các ký tự N và Ñ không được coi là giống nhau. Tôi không biết liệu việc đối chiếu chung có phù hợp với Thổ Nhĩ Kỳ hay không.

Lưu ý rằng dường như bạn đã nhầm lẫn các khái niệm về tập hợp ký tự và đối chiếu trong câu hỏi của mình. Bạn đã đề cập đến một đối chiếu với cột Thổ Nhĩ Kỳ của bạn và một bộ ký tự với cột tiếng Đức của bạn.

Bạn có thể chỉ định rõ ràng bộ ký tự và đối chiếu trong truy vấn. Ví dụ, bạn có thể viết

WHERE _utf8 'München' COLLATE utf8_unicode_ci = table.name; 

Trong cụm từ này, _utf8 'München' là một hằng số nhân vật, và

constant COLLATE utf8_unicode_ci = table.name 

là một specifier truy vấn trong đó bao gồm một tên đối chiếu rõ ràng. Đọc này. http://dev.mysql.com/doc/refman/5.7/en/charset-collate.html

Thứ ba, bạn có thể muốn gán một mặc định collation để mỗi cột ngôn ngữ cụ thể. Các collations mặc định được đưa vào các chỉ mục, vì vậy chúng sẽ giúp đẩy nhanh quá trình tìm kiếm.

Thứ tư, người dùng của bạn sẽ cần sử dụng phương thức nhập phù hợp (ánh xạ bàn phím, v.v.) để trình bày dữ liệu cho ứng dụng của bạn. Người dùng ngôn ngữ Thổ Nhĩ Kỳ hy vọng biết cách gõ từ tiếng Thổ Nhĩ Kỳ.

+0

Tôi quên viết rằng tôi lưu các từ tiếng Thổ Nhĩ Kỳ bằng cách thay thế các ký tự đặc biệt bằng mã unicode vì vậy tôi có thể sử dụng strtr() để phát hiện một ký tự trong chuỗi để thay thế nó bằng mã unicode gửi truy vấn – FKayan

+0

Tôi có nghĩa là tôi sử dụng strtr() với một mảng – FKayan

Các vấn đề liên quan