Bu amaçla ordinal 1 to 127
olarak ASCII
tanımlayabilirsiniz, bu nedenle aşağıdaki sorgu "ASCII olmayan" değerlere sahip bir dize belirleyecektir:
SELECT exists(SELECT 1 from regexp_split_to_table('abcdéfg','') x where ascii(x) not between 1 and 127);
ama süper verimli olmamaya olasıdır ve kullanımı alt sorguların sizi CHECK kısıtlaması yerine bir tetikleyici içinde yapmaya zorlar.
Onun yerine normal bir ifade kullanmayı tercih ediyorum. yazdırılabilir ASCII aralığını ise
CHECK (my_column ~ '^[ -~]*$')
this will match everything from the space to the tilde: Eğer istiyorsanız yazdırılabilir tüm karakterleri o zaman gibi bir denetim sınırlaması bir aralık kullanabilirsiniz.
CHECK (my_column ~ '^[\x00-\x7F]*$')
en sıkı doğru yaklaşım convert_to(my_string, 'ascii')
için olmak ve başarısız olursa bir istisna oluştuğunda izin verir ... ama: Tüm ASCII, yazdırılabilir ve yazdırılamaz istiyorsanız
, sen use byte escapes can PostgreSQL, ascii
(yani 7 bit) kodlamayı sunmaz, böylece yaklaşım mümkün değildir.