pgadmin 4中Postgresql数据库中的字段“email”的数据类型应该是什么?

4uqofj5v  于 2023-01-12  发布在  PostgreSQL
关注(0)|答案(3)|浏览(510)

你可以看到,我得到'没有找到结果'时,搜索varchar。


我需要知道我应该为postgresql数据库中的“email”选择的数据类型。

nle07wnf

nle07wnf1#

过去我使用文本varchar字符变化

rbpvctlc

rbpvctlc2#

除了使用VARCHAR(如@Maria所建议的)之外,您还可以从以下链接中获得一些见解:https://www.dbrnd.com/2018/04/postgresql-how-to-validate-the-email-address-column/并从此https://dba.stackexchange.com/questions/68266/what-is-the-best-way-to-store-an-email-address-in-postgresql
如果你读了其中的一些部分,他们创建了自己的函数或约束,这可能会帮助你更多地理解PSQL。
TL/DR,或者链接将来可能会更改(不知羞耻地从其中一个链接中获取):

CREATE EXTENSION citext;
CREATE DOMAIN domain_email AS citext
CHECK(
   VALUE ~ '^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$'
);
-- for valid samples
SELECT 'some_email@gmail.com'::domain_email;
SELECT 'accountant@dbrnd.org'::domain_email;
-- for an invalid sample
SELECT 'dba@aol.info'::domain_email;

正如Neil所指出的,是的,这就像使用自定义类型。
CREATE DOMAIN创建一个新域。域本质上是一种具有可选约束(对允许的值集的限制)的数据类型。source
对于那些不熟悉用来检查值的奇怪字符的人来说,它是一个regex pattern
和一个与表一起使用的示例:

CREATE TABLE sample_table ( id SERIAL PRIMARY KEY, email domain_email );

-- The following is invalid, because ".info" has 4 characters
-- the regex pattern only allows 2-3 characters
INSERT INTO sample_table (email) VALUES ('sample_email@gmail.info');
ERROR:  value for domain domain_email violates check constraint "domain_email_check"

-- The following query is valid
INSERT INTO sample_table (email) VALUES ('sample_email@gmail.com');
SELECT * FROM sample_table;
 id |         email
----+------------------------
  1 | sample_email@gmail.com
(1 row)

感谢Neil的建议。

r1zhe5dt

r1zhe5dt3#

我建议你使用CITEXT类型,在值比较中忽略大小写。对于电子邮件来说,防止重复很重要,比如username@example.comUserName@example.com
此类型是citext扩展的一部分,可通过以下查询激活:

CREATE EXTENSION citext;

相关问题