Khác với một số hệ thống cơ sở dữ liệu khác, MySQL cho phép chèn ký tự pipe (|) bình thường trong chuỗi string, không cần escape đặc biệt khi dùng trong lệnh INSERT thông thường.
Ví dụ minh họa
Tạo bảng demo:
mysql> CREATE TABLE PipeInsertDemo (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserPassword VARCHAR(100)
-> );
Query OK, 0 rows affected (0.52 sec)
Chèn dữ liệu chứa ký tự |:
mysql> INSERT INTO PipeInsertDemo(UserPassword) VALUES ('John123|');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO PipeInsertDemo(UserPassword) VALUES ('|123456CarolTaylor');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO PipeInsertDemo(UserPassword) VALUES ('Adam|345Smith');
Query OK, 1 row affected (0.20 sec)
Xem dữ liệu:
mysql> SELECT * FROM PipeInsertDemo;
+--------+--------------------+ | UserId | UserPassword | +--------+--------------------+ | 1 | John123| | | 2 | |123456CarolTaylor | | 3 | Adam|345Smith | +--------+--------------------+
Khi nào cần escape?
- Trong chuỗi liên kết (string literal) trong code ứng dụng (PHP, Python, Java...), pipe không cần escape
- Trong biểu thức chính quy (REGEXP), pipe là ký tự đặc biệt (OR), cần escape:
'\\|' - Trong LOAD DATA INFILE với FIELDS TERMINATED BY '|', pipe là delimiter
Ký tự thực sự cần escape trong MySQL string
| Ký tự | Escape sequence | Ý nghĩa |
|---|---|---|
| ' | \' | Dấu nháy đơn |
| " | \" | Dấu nháy kép |
| \ | \\ | Backslash |
| NULL | \0 | Null byte |
| Backspace | \b | |
| Tab | \t | |
| Newline | \n | |
| Carriage return | \r | |
| Control+Z | \Z | EOF trên Windows |