Hàm SOUNDEX() trong MySQL trả về một mã âm thanh (soundex string) dài 4 ký tự đại diện cho cách phát âm của một chuỗi. Hai chuỗi nghe giống nhau (ví dụ: 'Smith' và 'Smyth') thường có cùng mã SOUNDEX. Điều này hữu ích cho tìm kiếm tên người, địa chỉ khi người dùng gõ sai chính tả.
Cú pháp
SELECT * FROM ten_bang
WHERE SOUNDEX(gia_tri_tim_kiem) = SOUNDEX(ten_cot);
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(20),
LastName VARCHAR(20)
);
mysql> INSERT INTO DemoTable (FirstName, LastName) VALUES
('Adam', 'Smith'), ('David', 'Miller'), ('Carol', 'Taylor'),
('Chris', 'Brown'), ('John', 'Smith');
Dữ liệu
mysql> SELECT * FROM DemoTable;
+----+-----------+----------+
| Id | FirstName | LastName |
+----+-----------+----------+
| 1 | Adam | Smith |
| 2 | David | Miller |
| 3 | Carol | Taylor |
| 4 | Chris | Brown |
| 5 | John | Smith |
+----+-----------+----------+
Tìm kiếm tên 'Smith' (cả 'Smyth' nếu có)
mysql> SELECT * FROM DemoTable
WHERE SOUNDEX('Smith') = SOUNDEX(LastName);
Kết quả
+----+-----------+----------+
| Id | FirstName | LastName |
+----+-----------+----------+
| 1 | Adam | Smith |
| 5 | John | Smith |
+----+-----------+----------+
Xem mã SOUNDEX của các giá trị
mysql> SELECT LastName, SOUNDEX(LastName) FROM DemoTable;
+----------+-------------------+
| LastName | SOUNDEX(LastName) |
+----------+-------------------+
| Smith | S530 |
| Miller | M460 |
| Taylor | T460 |
| Brown | B650 |
| Smith | S530 |
+----------+-------------------+
Hạn chế của SOUNDEX
- Chỉ hoạt động tốt với tiếng Anh.
- Không phân biệt được nhiều từ có phát âm giống nhau nhưng viết khác hoàn toàn.
- Không sử dụng index (full table scan).
Thay thế hiện đại: MySQL 8.0+ hỗ trợ FULLTEXT SEARCH với ngram parser cho tiếng Việt/CJK, hoặc dùng extension như pg_trgm (PostgreSQL), Elasticsearch cho tìm kiếm mờ chuyên nghiệp.