Hướng dẫn how do i show special characters in mysql? - làm cách nào để hiển thị các ký tự đặc biệt trong mysql?

Dựa trên câu trả lời đúng, nhưng cũng có tính đến các ký tự điều khiển ASCII, giải pháp hoạt động cho tôi là:

SELECT * FROM `table` WHERE NOT `field` REGEXP  "[\\x00-\\xFF]|^$";

Nó làm điều tương tự: tìm kiếm vi phạm phạm vi ASCII trong một cột, nhưng cho phép bạn tìm kiếm các ký tự điều khiển, vì nó sử dụng ký hiệu thập lục phân cho các điểm mã. Vì không có so sánh hoặc chuyển đổi (không giống như câu trả lời của @Ollie), điều này cũng sẽ nhanh hơn đáng kể. (Đặc biệt nếu MySQL thực hiện chấm dứt sớm trên truy vấn regex, điều mà nó chắc chắn nên.)

Nó cũng tránh các trường trả lại có độ dài bằng không. Nếu bạn muốn một phiên bản dài hơn một chút có thể hoạt động tốt hơn, bạn có thể sử dụng điều này thay thế:

SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";

Nó thực hiện một kiểm tra riêng cho chiều dài để tránh kết quả có độ dài bằng không, mà không xem xét chúng cho một đường chuyền regex. Tùy thuộc vào số lượng các mục có độ dài bằng không bạn có, điều này có thể nhanh hơn đáng kể.

Lưu ý rằng nếu bộ ký tự mặc định của bạn là một cái gì đó kỳ quái trong đó 0x00-0xff không ánh xạ tới các giá trị giống như ASCII (có một ký tự như vậy được đặt ở bất cứ đâu không?), Điều này sẽ trả về một dương tính giả. Nếu không, hãy tận hưởng!

Trong cơ sở dữ liệu của mình, tôi đã phạm một sai lầm nhỏ bằng cách chèn một khoảng trống (ký tự không gian) sau một giá trị như thế này:

INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 

Khi thực hiện một truy vấn đơn giản trong mysqlworkbench:

SELECT * from MYTABLE;

Bảng cho thấy

-------------------------------
| country_name | code | value |
-------------------------------
| France       | FR   |   345 |
-------------------------------
etc...

Ký tự không gian không thể nhìn thấy trong đầu ra.

Bởi vì chúng tôi có thể gỡ lỗi ứng dụng của chúng tôi, chúng tôi đã tìm thấy ký tự không gian thêm nhưng nếu bạn không biết phải tìm gì, thì rất khó để bắt được loại lỗi đó.

Có cách nào để cho MySQLworkBench hiển thị những ký tự đặc biệt đó không?

Là một cách giải quyết, tôi đã sử dụng truy vấn này:

SELECT t.id, CONCAT("'",  t.country_name, "'") AS Country, 
    CONCAT("'",  t.code, "'") AS CountryCode, 
    t.value
FROM MYTABLE t

Nhưng bạn phải biết cột nào là

SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
1 và cái nào không (ví dụ: giá trị là một số).

Phiên bản tôi sử dụng là: mysqlworkbench 6.0.8.11354 Build 833

Đăng vào ngày 19 tháng 12 năm 2021

Tìm hiểu cách thoát khỏi các ký tự đặc biệt trong câu lệnh Chọn MySQL


Khi bạn viết một truy vấn MySQL, có thể đôi khi bạn cần đưa các ký tự đặc biệt vào tuyên bố của mình.

Ví dụ: giả sử bạn muốn bao gồm một biểu tượng báo giá

SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
2 bên trong câu lệnh
SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
3 của bạn như thế này:

SELECT 'Hello, I'm Nathan';

Truy vấn trên sẽ kích hoạt

SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
4 bởi vì bạn đang đặt một ký hiệu báo giá
SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
2 mà Lừa sử dụng làm dấu phân cách cho chuỗi.

Để sửa lỗi, bạn cần thoát khỏi ký tự khỏi được hiểu là dấu phân cách của một chuỗi.

Trong MySQL, bạn có thể thoát khỏi các ký hiệu báo giá bằng cách xen kẽ giữa các ký hiệu trích dẫn đơn và kép.

Nếu bạn sử dụng một ký hiệu trích dẫn duy nhất trong chuỗi của mình, hãy sử dụng trích dẫn kép cho dấu phân cách chuỗi như được hiển thị bên dưới:

SELECT "Hello, I'm Nathan";

-- Output:
-- +-------------------+
-- | Hello, I'm Nathan |
-- +-------------------+
-- | Hello, I'm Nathan |
-- +-------------------+

Bạn cũng có thể làm điều đó như thế này:

SELECT 'Hello, I"m Nathan';

-- Output:
-- +-------------------+
-- | Hello, I"m Nathan |
-- +-------------------+
-- | Hello, I"m Nathan |
-- +-------------------+

Ngoài ra, MySQL cũng có trình tự thoát ký tự đặc biệt như được hiển thị bên dưới:

  • SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
    
    6 - ký tự ASCII NUL (0x00).
  • SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
    
    7 - một ký tự trích dẫn (
    SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
    
    2).
  • SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
    
    9 - ký tự trích dẫn kép (
    INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
    
    0).
  • INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
    
    1 - một ký tự backspace.
  • INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
    
    2 - một ký tự dòng mới (linefeed).
  • INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
    
    3 - Một nhân vật trở lại vận chuyển.
  • INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
    
    4 - một ký tự tab.
  • INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
    
    5 - ASCII 26 (Control -Z).
  • INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
    
    6 - ký tự dấu gạch chéo ngược (
    INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
    
    7).
  • INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
    
    8 - một ký tự
    INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
    
    9.
  • SELECT * from MYTABLE;
    
    0 - một ký tự
    SELECT * from MYTABLE;
    
    1.

Bằng cách sử dụng cú pháp trên, bạn có thể thêm các ký tự được đề cập mà không được giải thích bởi MySQL.

Hãy xem ví dụ sau:

SELECT 'Hello, I\'m Nathan';

-- Output:
-- +-------------------+
-- | Hello, I'm Nathan |
-- +-------------------+
-- | Hello, I'm Nathan |
-- +-------------------+

Để thêm ký tự mới, hãy sử dụng chuỗi thoát

INSERT INTO MYTABLE(country_name, code, value) values ('France', 'FR ', 345); 
2 như hình dưới đây:

SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
0

Và đó là cách mà bạn bao gồm các ký tự đặc biệt trong truy vấn MySQL

SELECT * FROM `table` WHERE `field` <> "" AND NOT `field` REGEXP  "[\\x00-\\xFF]";
3.

Làm cách nào để tìm các ký tự đặc biệt trong MySQL?

Làm thế nào để tôi tìm thấy các ký tự đặc biệt trong MySQL ?..
\ 0 - ký tự ASCII NUL (0x00) ..
\ ' - một ký tự trích dẫn duy nhất (') ..
\ " - một ký tự trích dẫn kép (") ..
\ B - một ký tự backspace ..
\ n - một ký tự mới (linefeed) ..
\ r - một nhân vật trở lại vận chuyển ..
\ t - một ký tự tab ..
\ Z-ASCII 26 (Control-Z) ..

Làm thế nào để bạn đại diện cho các ký tự đặc biệt trong SQL?

Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng hàm SQL Server String_escape () để thoát các ký tự đặc biệt trong một chuỗi.... Tổng quan về chức năng SQL Server String_escape () ..

Làm cách nào để thoát khỏi các ký tự đặc biệt trong MySQL?

MySQL nhận ra các chuỗi thoát được hiển thị trong Bảng 9.1, Trình tự thoát ký tự đặc biệt.... Bảng 9.1 Trình tự thoát ký tự đặc biệt ..

Làm thế nào để bạn tìm thấy nếu một chuỗi chứa các ký tự đặc biệt trong SQL?

Chọn * Từ TableName WHERE CộtName như "%#%" hoặc tên cột như "%$%" hoặc (v.v.) lưu câu trả lời này.