01/10/2018, 16:29

Mysql không tìm kiếm được tên có dấu cách, ví dụ: "Hà Nam"

Như tiêu đề, em đang gặp cái vấn đề về tìm kiềm trên Mysql. Em có dùng Fulltext search để tìm kiếm gần đúng tên cửa hàng. Chạy ở local thì tất cả đều ổn(mysql 5.7.22) nhưng khi đưa lên server( mysql 5.7.21,em sài trên RDS của Amazon luôn) thì không tìm thấy được.
(Dữ liệu ở local và server là giống nhau). Có bác nào đi qua chỉ giáo giùm hoặc cho em xin cái hướng để mà mò tiếp với.
Ví dụ: Tên cửa hàng là “Bách Hoá Tổng Hợp” thì ở searchWord là “Bách Hoá” hay “báchhoá” nó đều tìm được cả.
Nhưng khi lên server thì chịu.
Cần lắm ý kiến của các cao nhân

HK boy viết 18:44 ngày 01/10/2018

Thử

"Bách\ Hoá\ Tổng\ Hợp"

xem.

Chien Dang viết 18:36 ngày 01/10/2018

Bạn thêm N vào trước nhé, để nó nhận biết đây là type nvarchar - kiểu chứa được kí tự unicode, nếu ko nó sẽ chỉ nhận kiểu là varchar thôi, và từ của bạn sẽ ko hợp lệ.
Ví dụ:
select * from Universities where Name=N'Bách Khoa'

Thông tin thêm: What is the difference between varchar and nvarchar?

Lythesuk Nguyen viết 18:45 ngày 01/10/2018

Thanks bạn.để mình thử.còn cái vụ local chạy ngon,lên server thì k search ra bạn có ý kiến gì ko:(

Chien Dang viết 18:35 ngày 01/10/2018

Vụ này có thể do region hoặc culture của máy local của bạn và server khác nhau, nên một số kiểu dữ liệu sẽ khác nhau, ví dụ như thời gian, hoặc Encoding của dữ liệu tìm kiếm.

Lythesuk Nguyen viết 18:43 ngày 01/10/2018

có thể cụ thể hơn tẹo được ko bạn. Có cái link tham khảo thì tốt quá

Vô Thin viết 18:34 ngày 01/10/2018

Kiểm tra charset khi kết nối là gì, collation có tương thích hay không nữa. Tiếng Việt thật là rắc rối làm sao. Nếu cảm thấy bế tắc vì cái charset và collation thật rách việc, cứ chơi mặc định và nhè mấy cái có bin (binary) mà phang hoặc chơi theo kiểu hơi mất công sức, chỗ lưu trữ đó là khi input vào, ta lưu làm 2 phiên bản: 1 phiên bản tiếng Việt có dấu, phiên bản còn lại bỏ hết dấu đi. Cách này có cái dở là khi tìm nó sẽ ra rất nhiều những kết quả khá buồn cười nếu không làm thêm từ điển. Ví dụ như Hà Nam mà lưu thành Ha Nam, khi tìm nó có thể ra cả Há Nảm, Hạ Nâm,…

Lythesuk Nguyen viết 18:38 ngày 01/10/2018

đã đổi lại charset và collation trên server sang utf8 và utf8_general_ci mà vẫn không tìm thấy bác ạ. Em lại sắp tuyệt vọng rồi:(( Có bác nào có hướng sửa chỉ tiếp em với

Vô Thin viết 18:33 ngày 01/10/2018

Thay dấu bằng trong câu query thành LIKE ‘%từ khóa%’ thử xem.

Lythesuk Nguyen viết 18:30 ngày 01/10/2018

Em dung Full text search ma.
match(shop_name,shop_branch_name) against ( “Bach Hoa Tong Hop” IN NATURAL LANGUAGE MODE)

Lythesuk Nguyen viết 18:39 ngày 01/10/2018

Sau một thời gian vật vã.cuối cùng cũng fix thành công.lưu lại cho ai cũng sai giống vậy.check và bật cái innodb optimize fulltext only thành On.set lại charset ```
mysql> show variables like ‘%innodb_optimize_fulltext_only%’; ±------------------------------±------+
| Variable_name | Value |
±------------------------------±------+
| innodb_optimize_fulltext_only | ON |
±------------------------------±------+
1 row in set (0.00 sec)

mysql> show variables like ‘%character%’;
±-------------------------±------------------------------------------+
| Variable_name | Value |
±-------------------------±------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /rdsdbbin/mysql-5.7.21.R1/share/charsets/ |
±-------------------------±------------------------------------------+
8 rows in set (0.00 sec)

Bài liên quan
0