使用字符串的唯一int(11)mysql值


Unique int(11) mysql value using string

我的数据库中有一列是int(11),有时我无法将用户名与ID数据库匹配,因为名称略有不同(即John Doe而不是Johnathan Doe)。正常的id从11000范围开始,所以我想将它们的名称转换为整数,并以00或其他值为前缀,这样我就可以触发一个标志供某人查看和更新。我知道我可以使用str_pad来获得00,但我似乎无法根据名称生成一定数量的唯一数字。我知道重复的可能性很高,但我不确定我还能对primary/unique列做些什么。如有任何帮助,我们将不胜感激。

使用mt_randstr_pad的示例:

str_pad(mt_rand(100000000,999999999),11,'00',STR_PAD_LEFT);

有人有更好的选项可以使用Name字符串吗?

我的数据库中有一列是int(11)

那列是一个整数。在存储级别,"11"没有任何意义。

想象一下,你有一个很大的用户名表,有人第40次尝试输入"John Smith"。你想做什么?你想让人把它与所有其他变体进行比较吗?你想识别和复习变体拼写吗,比如"Johnathan"、"Jonathon"、"John"answers"Jhon"?重大决策,但它们不会影响如何处理需要审查的身份证号码。

无论出于何种原因,要确定需要检查的行,最好将它们的键放入另一个表中。

create table review_sets (
  set_id integer not null,
  set_created timestamp not null default now(),
  rationale varchar(100) not null default 'Duplicate of existing user?',
  primary key (set_id),
  unique (set_created)
);
create table review_ids (
  set_id integer not null,
  user_id integer not null,
  primary key (set_id, user_id),
  foreign key (set_id) references review_sets (set_id),
  foreign key (user_id) references users (user_id)         -- Not shown.
);

review_sets.rationale列允许您将拼写问题与逾期付款或网站滥用区分开来。review_ids表允许您将id限制为几个变体,而不是所有可能的变体。(但我不确定这可能有多有用。)

您可能需要添加列来标识审阅者、审阅完成时间以及该审阅者做出的决定。根据您的应用程序,您可以在做出决定后直接删除行。