Hướng dẫn tìm kiếm có dấu trên MySQL sử dụng CONVERT(value, BINARY)

Trong bài viết này tôi sẽ đề cập đến vấn đề hướng dẫn tìm kiếm có dấu trên MySQL sử dụng CONVERT(value, BINARY). Vậy tìm kiếm có dấu trên MySQL có gì để tìm hiểu trong bài viết này thì hay xem vấn đề tôi đặt ra ở dưới.

Vấn đề

Khi tôi làm dự án cho khách hàng, và đương nhiên website nào cũng có chức năng cần thiết đó tìm kiếm.Với một số website như tin tức, thương mại điện tử đôi khi chúng ta không để ý đến việc tìm kiếm kết quả phải chính xác và cụ thể nhất.Ví dụ :Người dùng vào trang blog itphutran.com và search với từ khóa “học java” thì kết quả tìm kiếm được hiển thị như sau:

Hướng dẫn tìm kiếm có dấu trên MySQL sử dụng CONVERT(value, BINARY)

Như vậy khi tìm kiếm ngoài kết quả tìm kiếm với cụm từ “học java” thì nếu trong bài viết của tôi có những cụm từ như “hoc” ,”hóc”,…vv tóm lại là có từ hoc thì nó sẽ được tìm kiếm và hiển thị kết quả.Đơn giản vì chúng ta thường sử dụng câu lệnh SQL như sau :

SELECT * FROM table WHERE column LIKE ‘%học java%’

Vậy nên việc tìm kiếm sẽ được những kết quả tương tự chứ không chính xác bắt buộc phải có cụm từ “học java”.

Nhưng với một số website như quản lý tín chỉ của một trường đại học, hay quản lý danh sách sinh viên chẳng hạn thì sẽ tìm kiếm một cách chính xác sinh viên đó chứ không nên tìm kiếm những sinh viên liên quan để nâng cao hiệu suất tìm kiếm và không mất nhiều chi phí thời gian.

Một ví dụ như sau:

 

Hướng dẫn tìm kiếm có dấu trên MySQL sử dụng CONVERT(value, BINARY)

 

Tôi có bảng listsv với 2 cột sv_id và name. Trong trường hợp này tôi muốn tìm kiếm những sinh viên có tên “Anh”

Cách thông thường tìm kiếm khi không sử dụng  CONVERT(value, BINARY)

SELECT * FROM lissv where name LIKE “%Anh”

Như vậy kết quả tìm kiếm: 

 

Hướng dẫn tìm kiếm có dấu trên MySQL sử dụng CONVERT(value, BINARY)

 

Qua đó, chúng ta thấy rằng những sinh viên có tên như Ánh, Cảnh vì có từ “Anh” nên kết quả cũng được tìm kiếm và hiển thị. Nhưng trường hợp này chúng ta không mong muốn kết quả như trên, chính xác phải là sinh viên có tên “Nguyễn Anh”. Vậy lúc này các bạn sẽ sử dụng cách để chuyển từ chuỗi string sang binary, mục đích chuyển từ chuỗi sang hệ nhị phân.

Ví dụ : Từ Anh chuyển sang hệ nhị phân có dạng như sau :

Anh => 01000001 01101110 01101000

Cảnh => 01000011 1111010100011 01101110 01101000

Qua đó khi chuyển về dạng binary thì việc tìm kiếm sẽ chính xác.

Tìm kiếm khi sử dụng  CONVERT(value, BINARY)

Vậy câu lệnh khi convert từ string sang BINARY trong MySQL là :

CONVERT(‘string’, BINARY))

Tương ứng câu lênh truy vấn tìm kiếm với ví dụ trên :

SELECT * FROM lissv where name LIKE CONCAT(‘%’, CONVERT(‘Anh’, BINARY))

Trong đó các bạn lưu ý chúng ta sử dụng hàm CONCAT để nối chuỗi trong MySQL.

Kết quả : 

Hướng dẫn tìm kiếm có dấu trên MySQL sử dụng CONVERT(value, BINARY)

Qua đó , kết quả như mong đợi.

#Tổng Kết

Một số trường hợp tìm kiếm chúng ta không cần sử dụng cách convert từ string sang BINARY sử dụng CONVERT(value, BINARY) nhưng nếu muốn tìm kiếm một cách chính xác thì bài hướng dẫn trên là một ví dụ cụ thể.

Cảm ơn các bạn đã đọc bài viết, nếu thấy hay hãy share để mọi người cùng đọc nhé.Tks you!