我如何从数据库中排除所有非ASCII字符或英语以外的语言环境(postgresql)中的字符串值

hyrbngr7  于 2023-04-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(153)

数据库(postgresql)包含utf-8以外的字符,例如Turkish
我们需要只保留英语版本中的字符,使用UTF-8编码。

更新

  • 范例

ğıüçb(土耳其语)çš əöğd(阿塞拜疆语)ب ف اتن(波斯语)T ר י ת(希伯来语)
我们需要找到所有不是英语或美国语的字符串(删除它们),(只留下英语或美国语版本),因为登录必须只使用英语。
扫描整个数据库的脚本是什么样的,并且对于某个字段(例如,login字段包含的字符不是utf-8编码或英语以外的语言环境),指定(将显示)客户端编码的类型(即,客户端从其操作系统输入数据的编码)。

kognpnkq

kognpnkq1#

insert into client (username,country) values ('صیdf2بdfdلت', 'per'); 

insert into client (username, country) values ('ㄷㅅdfㅅㅅ89ㅎㅎ', 'korean'); 
insert into client (username, country) values ('ğĞGÇç24ööFc', 'azerb'); 
insert into client(username, country) values ('DhËFGjJopq', 'albany');
select * from client c where (c.username ~* '(?:[a-zA-Z]\d)|(?:\d[a-zA-Z])') is false;
  • *':alnum:'**-在这种情况下,此表达式将找不到必需的字符串
/*
This expression searches for all strings that are not in the Unicode range:
48 - 57 - digits
65 - 90 - uppercase letters
97 - 122 - lowercase letters

~*    case-insensitive matches

^  $  set at the beginning and at the end, indicate the exact definition of the condition

+    quantifier, indicates that there can be any number of characters that a string has.
*/

select * from login l where (l.username ~* '^[A-Za-z0-9]+$') is false;

相关问题