sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql omezení pro kontrolu ne-ascii znaků

Můžete definovat ASCII jako ordinal 1 to 127 pro tento účel, takže následující dotaz bude identifikovat řetězec s hodnotami "non-ascii":

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

ale pravděpodobně to nebude superefektivní a použití poddotazů by vás donutilo to udělat ve spouštěči, nikoli v omezení CHECK.

Místo toho bych použil regulární výraz. Pokud chcete všechny tisknutelné znaky pak můžete použít rozsah v kontrolním omezení, například:

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

toto bude odpovídat všemu od prostoru po vlnovku , což je tisknutelný rozsah ASCII.

Pokud chcete všechny ASCII, tisknutelné i netisknutelné, můžete použít byte escape :

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

Nejpřísněji správný přístup by byl convert_to(my_string, 'ascii') a nechat vyvolat výjimku, pokud selže ... ale PostgreSQL nenabízí ascii (tj. 7bitové) kódování, takže tento přístup není možný.



  1. Jak mohu nastavit konfiguraci klienta pro MySQL Workbench bez nainstalovaného serveru?

  2. Jak najít určité hexadecimální hodnoty a hodnoty Char() v MySQL SELECT

  3. Najděte chybějící data předaná do klauzule SQL

  4. Ukládání obrázků na SQL Server?