PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Postgresql ограничение за проверка за не-ascii знаци

Можете да дефинирате ASCII като ordinal 1 to 127 за тази цел, така че следната заявка ще идентифицира низ със стойности "non-ascii":

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

но е малко вероятно да бъде свръхефективен и използването на подзаявки ще ви принуди да го направите в тригер, а не в ограничение CHECK.

Вместо това бих използвал регулярен израз. Ако искате всички знаци за печат тогава можете да използвате диапазон в ограничение за проверка, като:

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

това ще съответства на всичко от интервала до тилда , което е печатаемият ASCII диапазон.

Ако искате всички ASCII, печатаеми и непечатаеми, можете да използвате екранирани байтове :

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

Най-стриктно правилният подход би бил convert_to(my_string, 'ascii') и нека бъде повдигнато изключение, ако не успее ... но PostgreSQL не предлага ascii (т.е. 7-битово) кодиране, така че този подход не е възможен.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Прочетете сумата в таблица на postgres

  2. Преобразуване на Play! еволюция на рамката от MySQL към PostgreSQL

  3. Размер на таблицата с оформление на страницата

  4. Как да изберете двоични данни от колона postgres

  5. Защо SQL идентификационните последователности излизат от синхрон (по-специално с помощта на Postgres)?