我的数据库中有一个列是 int(11)
,有时我无法将用户名与 ids 数据库相匹配,因为名称略有不同(即 John Doe 而不是乔纳森·多伊)。正常的 id 从 11000 范围开始,所以我想将它们的名称转换为整数并在前面添加 00 或其他内容,这样我就可以触发一个标志供某人查看和更新。我知道我可以使用 str_pad
来获取 00,但我似乎无法生成一定数量的数字以使其与名称有些不同。我知道重复的可能性很高,但我不确定我还能对primary/unique
列做什么。任何帮助将不胜感激。
使用mt_rand
和str_pad
的示例:
str_pad(mt_rand(100000000,999999999),11,'00',STR_PAD_LEFT);
有人有更好的选择可以使用名称字符串吗?
最佳答案
I have a column in my database that is a int(11)
该列是一个整数。在存储级别,“11”没有任何意义。
想象一下,您有一个很大的用户名表,有人第 40 次尝试输入“John Smith”。你想让我做什么?您希望有人将其与所有其他变体进行比较吗?您想要识别和检查变体拼写,例如“Johnathan”、“Jonathon”、“John”和“Jhon”吗?重大决定,但它们不会影响如何处理需要审核的 ID 号。
要识别需要检查的行,无论出于何种原因,最好将它们的键放入另一个表中。
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 限制为几个变体,而不是所有可能的变体。 (但我不确定这有多大用处。)
您可能需要添加用于标识审阅者、审阅完成时间以及该审阅者做出的决定的列。根据您的应用程序,您可能只能在做出决定后删除行。
关于php - 使用字符串的唯一 int(11) mysql 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18456711/