Tìm kiếm tiếng việt trong mysql
Hiện tại e đang dùng mysql cho dự án, sử dụng where like để search dữ liệu, nhưng kết quả trả về không chính xác lắm: ví dụ : DB e lưu là: D test mua hàng tìm kiếm: D test mua => ra kết quả D test mua hàng => không ra kết quả và nhiều case khác
Anh chị nào có kinh nghiệm làm search với mysql rồi giúp em với ạ
2 CÂU TRẢ LỜI
- C1: Nếu dùng where like thì thêm 1 trường bỏ dấu đi rồi tìm trên trường đó
- C2: Sử dụng fulltext search trong mysql sẽ giải quyết vấn đề dấu, ko dấu, sai chính tả.. cũng như với dữ liệu text lớn thì cũng nhanh hơn. -> recommend
- C3: Thêm một vài framework chuyên cho search
- dự án nhỏ, siêu nhỏ: meilisearch ...
- dự án vừa, to: elastic search, solr ...
Bên mình thì vẫn search được bình thường, có thể do config về encoding của table hoặc charset của column, bạn check lại thử
@NgocPH a cho em xin charset của db với collation của db a với đc k ạ
- DB thì đang để theo default là charset = latin1 và collation = latin1_swedish_ci
- Còn column lưu tiếng việt thì mình để collation = utf8_general_ci, type = varchar
Để tìm kiếm tiếng Việt trong MySQL, D có thể sử dụng câu truy vấn SELECT
với operator LIKE
và ký tự đại diện cho dấu nháy đơn ('
) để tìm kiếm các giá trị có chứa ký tự tiếng Việt.
Ví dụ, để tìm kiếm các học sinh có tên chứa ký tự "đ" trong bảng students
, bạn có thể sử dụng câu truy vấn sau:
SELECT * FROM students WHERE name LIKE '%đ%';
Trong đó, '%đ%'
là ký hiệu cho bất kỳ chuỗi nào chứa ký tự "đ".
Hoặc có thể sử dụng collation:
SELECT * FROM students WHERE name COLLATE utf8mb4_unicode_ci LIKE '%d%';
Bạn cũng có thể sử dụng câu truy vấn SELECT với hàm CONVERT() để chuyển đổi cột name
sang dạng ASCII (không dấu) trước khi tìm kiếm.
SELECT * FROM students WHERE CONVERT(name USING ASCII) LIKE '%d%';
Lưu ý:
- Để tìm kiếm các ký tự tiếng Việt có dấu, bạn cần phải đảm bảo rằng cột
name
được lưu trữ dưới dạng Unicode (như utf8mb4). Nếu không, câu truy vấn sẽ không hoạt động đúng đâu nhé.