Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Xóa entry '\\' trong MySQL?

Vấn đề: Escape backslash

Backslash \ là ký tự escape trong MySQL string literal. Cần escape gấp đôi.

Giải pháp: DELETE với escape đúng

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (FolderName VARCHAR(100));
mysql> INSERT INTO DemoTable VALUES('????');
mysql> INSERT INTO DemoTable VALUES('\\\\');  -- Lưu thực tế: \\

Dữ liệu gốc

+------------+
| FolderName |
+------------+
| ????       |
| \\         |
+------------+

Xóa dòng có '\\' (2 backslash)

mysql> DELETE FROM DemoTable WHERE FolderName = '\\\\\\\\';

Giải thích: '\\\\\\\\' trong SQL string → \\\\ thực tế → so khớp với \\ trong DB

Kết quả

+------------+
| FolderName |
+------------+
| ????       |
+------------+

Quy tắc Escape Backslash

ContextMuốn lưuViết trong SQL
String literal\'\\\\'
String literal\\'\\\\\\\\'
LIKE pattern\'\\\\\\\\' (cần escape cho LIKE + SQL)
REGEXP\'\\\\\\\\' (cần escape cho REGEXP + SQL)

Cách an toàn hơn: Prepared Statement

-- Application code (PHP PDO)
$stmt = $pdo->prepare("DELETE FROM DemoTable WHERE FolderName = ?");
$stmt->execute(['\\\\']);  -- Không cần escape thủ công

Hàm QUOTE()

mysql> SELECT QUOTE('\\');   -- '\\\\'
mysql> SELECT QUOTE('\\\\'); -- '\\\\\\\\'

Lưu ý phiên bản

  • MySQL < 5.7: NO_BACKSLASH_ESCAPES SQL mode thay đổi hành vi
  • MySQL 8.0: Mặc định bật backslash escape
  • Best practice: Dùng parameterized query, tránh concat string

Tìm dòng chứa backslash

-- Chứa ít nhất 1 backslash
WHERE FolderName LIKE '%\\\\%'

-- Chứa đúng 2 backslash
WHERE FolderName = '\\\\'
-- Hoặc
WHERE FolderName LIKE '%\\\\%' AND FolderName NOT LIKE '%\\\\\\\\%'