PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Ograniczenie Postgresql do sprawdzania znaków spoza ASCII

Możesz zdefiniować ASCII jako ordinal 1 to 127 w tym celu, więc następujące zapytanie zidentyfikuje ciąg z wartościami „non-ascii”:

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

ale prawdopodobnie nie będzie to super wydajne, a użycie podzapytań zmusiłoby cię do zrobienia tego w wyzwalaczu, a nie w ograniczeniu CHECK.

Zamiast tego użyłbym wyrażenia regularnego. Jeśli chcesz wszystkie znaki do wydrukowania następnie możesz użyć zakresu w ograniczeniu sprawdzającym, na przykład:

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

dopasuje to wszystko, od przestrzeni po tyldę , który jest drukowalnym zakresem ASCII.

Jeśli chcesz, aby wszystkie ASCII, drukowane i niedrukowalne, możesz użyć bajtów ucieczki :

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

Najbardziej poprawnym podejściem byłoby convert_to(my_string, 'ascii') i niech zostanie zgłoszony wyjątek, jeśli się nie powiedzie ... ale PostgreSQL nie oferuje ascii (tj. 7-bitowe) kodowanie, więc takie podejście nie jest możliwe.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainstalować klejnot pg PostgreSQL na Ubuntu?

  2. Nie można znaleźć połączenia Oracle, gdy zdefiniowane jest połączenie PostGIS

  3. Python postgreSQL sqlalchemy wysyła zapytanie do kolumny DATERANGE

  4. Importujesz schemat xml do postgres, aby automatycznie utworzyć tabelę, a następnie wypełnić ją plikiem xml?

  5. Jak wykonać aktualizację kaskadową?