Yêu cầu thg 12 28, 2022 4:12 SA 679 0 2
  • 679 0 2
0

Tìm kiếm tiếng việt trong mysql

Chia sẻ
  • 679 0 2

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


Đã trả lời thg 12 28, 2022 4:48 SA
+2
  • 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 ...
Chia sẻ
thg 12 28, 2022 7:52 SA

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ử Screen Shot 2022-12-28 at 14.52.15.png

Avatar Dương Siêu @duongdosieu224
thg 12 30, 2022 2:02 SA

@NgocPH a cho em xin charset của db với collation của db a với đc k ạ

thg 12 30, 2022 3:35 SA

@duongdosieu224

  • 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
Đã trả lời thg 1 1, 2023 4:36 CH
0

Để 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é.
Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí