การค้นหาข้อความที่มีอักขระพิเศษ (เช่น Single Quote) ใน MySQL
ใช้ REPLACE() กำจัดอักขระพิเศษชั่วคราว แล้วค่อย LIKE เพื่อค้นหา
ตัวอย่าง: ค้นหา 'MySQL's' (มี single quote)
1. สร้างตารางและเพิ่มข้อมูล
CREATE TABLE DemoTable (Title TEXT);
INSERT INTO DemoTable VALUES ('MySQL'), ('MongoDB\'s'), ('MySQL\'s'), ('Java\'s');
2. ดูข้อมูล
SELECT * FROM DemoTable;
ผลลัพธ์:
+-----------+
| Title |
+-----------+
| MySQL |
| MongoDB's |
| MySQL's |
| Java's |
+-----------+
3. ค้นหา 'MySQL's' โดยใช้ REPLACE กำจัด Quote ก่อน
SELECT * FROM DemoTable
WHERE REPLACE(Title, '''', '') LIKE '%MySQLs%';
ผลลัพธ์:
+---------+
| Title |
+---------+
| MySQL's |
+---------+
อธิบายคำสั่ง
REPLACE(Title, '''', ''): แทนที่ Single Quote (') ด้วย Empty String ('') → 'MySQL's' กลายเป็น 'MySQLs'LIKE '%MySQLs%': ค้นหา 'MySQLs' ในผลลัพธ์ที่ Replace แล้ว- ใน SQL: Single Quote เขียนเป็น
''(สองอัน) หรือ\'
วิธีอื่น: Escape Single Quote ใน LIKE Pattern
-- ใช้ Backslash Escape (Default)
SELECT * FROM DemoTable WHERE Title LIKE 'MySQL\'s';
-- หรือใช้ ESCAPE clause
SELECT * FROM DemoTable WHERE Title LIKE 'MySQL|'s' ESCAPE '|';
การค้นหาข้อความที่มีอักขระพิเศษอื่นๆ
-- ค้นหาที่มี % (Wildcard ตรงตัว)
WHERE Title LIKE '%\%%' ESCAPE '\'
-- ค้นหาที่มี _ (Wildcard ตรงตัว)
WHERE Title LIKE '%\_%' ESCAPE '\'
-- ค้นหาที่มี Backslash
WHERE Title LIKE '%\\%'
Full-Text Search (สำหรับข้อความยาว)
ALTER TABLE DemoTable ADD FULLTEXT INDEX ft_title (Title);
SELECT * FROM DemoTable WHERE MATCH(Title) AGAINST('MySQL' IN BOOLEAN MODE);
Generated Column สำหรับค้นหาแบบไม่มีอักขระพิเศษ
ALTER TABLE DemoTable
ADD COLUMN TitleClean VARCHAR(200)
GENERATED ALWAYS AS (REPLACE(REPLACE(Title, '''', ''), '"', '')) STORED,
ADD INDEX idx_title_clean (TitleClean);
-- ค้นหาเร็ว
SELECT * FROM DemoTable WHERE TitleClean LIKE '%MySQLs%';