PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Ràng buộc postgresql để kiểm tra các ký tự không phải ascii

Bạn có thể xác định ASCII dưới dạng ordinal 1 to 127 cho mục đích này, vì vậy truy vấn sau sẽ xác định một chuỗi có giá trị "không phải ascii":

SELECT exists(SELECT 1 from regexp_split_to_table('abcdéfg','') x where ascii(x) not between 1 and 127);

nhưng nó không có khả năng siêu hiệu quả và việc sử dụng các truy vấn con sẽ buộc bạn thực hiện điều đó trong một trình kích hoạt thay vì ràng buộc KIỂM TRA.

Thay vào đó, tôi sẽ sử dụng một biểu thức chính quy. Nếu bạn muốn tất cả các ký tự có thể in được thì bạn có thể sử dụng một phạm vi trong một ràng buộc kiểm tra, như:

CHECK (my_column ~ '^[ -~]*$')

điều này sẽ khớp với mọi thứ từ dấu cách đến dấu ngã , là phạm vi ASCII có thể in được.

Nếu bạn muốn tất cả ASCII, có thể in và không thể in, bạn có thể sử dụng các thoát byte :

CHECK (my_column ~ '^[\x00-\x7F]*$')

Cách tiếp cận chính xác nhất sẽ là convert_to(my_string, 'ascii') và để một ngoại lệ được nêu ra nếu nó không thành công ... nhưng PostgreSQL không cung cấp ascii (tức là 7-bit) mã hóa, vì vậy cách tiếp cận đó không thể thực hiện được.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chuyển đổi bất kỳ chuỗi ngày nào thành dấu thời gian không có múi giờ

  2. Tạo câu lệnh SQL với python

  3. Postgresql json like truy vấn

  4. Làm cách nào để cấu hình và khởi động PostgreSQL trên windows theo cách thủ công?

  5. Cách viết hoa chữ cái đầu tiên của mỗi từ trong PostgreSQL