数据库中的 Twitter 名称长度
Posted
技术标签:
【中文标题】数据库中的 Twitter 名称长度【英文标题】:Twitter name length in DB 【发布时间】:2010-11-23 01:35:51 【问题描述】:我正在向成员表中添加一个字段,用于为网站上的成员提供 Twitter 名称。据我所知,最大 twitter 名称长度为 20,因此很明显我应该将字段大小设置为 varchar(20) (SQL Server)。
这是个好主意吗?
如果 Twitter 开始允许用户名中包含多字节字符怎么办?我应该将此字段设为 nvarchar 吗?
如果 Twitter 决定增加用户名的大小怎么办?我应该改为 50,然后在用户输入的名称超过 20 时警告用户?
我正在尝试进行防御性编码,以便减少修改此输入字段周围的代码以及可能需要更改数据库架构的机会。
【问题讨论】:
20 个字符并不总是等于 20 个字符,特殊字符可能需要进行 html 编码。 【参考方案1】:虽然新帐户限制 用户名中的 15 个字符和 名称中的 20 个字符,但对于旧帐户,此限制似乎未定义。文档here 指出:
Earlybirds:Twitter 的早期用户的用户名或真实姓名可能比我们目前允许的用户名长。在您需要保存对帐户设置的更改之前,这是可以的。除非您的用户名/真实姓名长度合适,否则不会保存任何更改;这意味着您必须更改您的真实姓名/用户名才能符合我们最现代的规定。
所以你可能最好有一个长字段,并在遇到边界情况时为自己节省一些时间。
【讨论】:
【参考方案2】:在寻找相同信息时,我在 twitter 帮助部分的一个奇怪的地方发现了以下内容(为什么不在 API 文档中?谁知道?):
“您的用户名最多可包含 15 个字符。为什么不再包含?因为我们会将您的用户名附加到您发出的 SMS 更新和 IM 消息的 140 个字符中。如果您的姓名超过 15 个字符,您的消息也会发送一条短信很长。”
http://help.twitter.com/entries/14609-how-to-change-your-username
所以也许一个人甚至可以摆脱 varchar(16)
【讨论】:
【参考方案3】:这里要记住的一点是,使用 nvarchar 的字段需要两倍的空间,因为它需要 2 个字节来存储每个潜在的 unicode 字符。因此,使用 nvarchar 的 twitter 状态需要 280 的大小,再加上一些可能的转发,因为这些不包括在 140 字符的限制中。事实上,我今天才发现这一点!
例如:
RT @chatrbyte:这里有一些很棒的推文 我正在转发。
RT @chatrbyte: 不包含在 140 个字符的限制中。
因此,假设 Twitter 用户名有 20 个字符的限制,并且还想捕获 ReTweet,保存完整推文的字段需要是大小为 280 + 40(对于用户名)+ 8(转推前的初始 RT @)+4(转推用户名后的 :+空格)= 330。
我会说去 nvarchar(350) 给自己一点空间。这就是我现在正在尝试的。如果我错了,我会在这里更新。
【讨论】:
我相信你错了:“RT @chatrbyte:”IS 包含在 140 个字符中。转推可能会被截断以适应。【参考方案4】:Twitter 允许输入 140 个字符作为用于传输的消息负载,并在 SMS 消息的开头包含“[用户名]:”。由于消息的上限为 140 个字符,并且消息系统基于 SMS,我认为他们必须减小允许的消息大小以增加用户名。我认为 20 个字符是用户名的最大长度是一个非常安全的赌注。我会使用 nvarchar 以防有人使用 16 位字符,并且可能会稍微填充一下。 nvarchar(24)
应该可以工作;我不会比nvarchar(32)
更高。
如果您要为他们的服务开发应用程序,您可能应该在 Twitter 的 API Announcements mailing list 上观看消息。
【讨论】:
【参考方案5】:我猜您正在管理应用程序中 Twitter 名称字段上的数据条目,而不仅仅是在数据库中。如果您将该字段打开为 200 个字符,您只需在一处更改代码,或者如果您允许用户输入超过 20 个字符的 Twitter 名称,您根本不必担心更改。
【讨论】:
【参考方案6】:我个人不会担心。使用 200 之类的东西(或 256 之类的好整数),你就不会遇到这个问题。那么限制就在他们的 API 上,所以你最好还是做一些验证它是一个真实的用户名。该验证隐含地包括长度检查。
【讨论】:
我很喜欢这个回答,“像 256 这样一个不错的整数”,直到我第二次读到它,我才觉得奇怪。【参考方案7】:您可以进行防御性编码的只有这么多,我建议您查看twitter API 文档并遵循其中指定的任何内容。也就是说,粗略地看了一下似乎没有指定用户名的长度,烦人:/
【讨论】:
【参考方案8】:现在,空间通常不是问题,所以我会使用一种最通用的方法:使用 nvarchar(200)。
在设计数据库模式时,您必须提前两步思考,甚至比编程时还要多。或者给自己一个好的模式更新策略,那么你也可以使用 varchar(20)。
【讨论】:
【参考方案9】:[仅供参考]
Twitter 在 SMS 上工作,限制为 256 个字符,因此名称必须小,以免撞到消息中。 nvarchar 对所有 twitter 文本都是一个好主意 如果 Twitterer 的真实 ID 是手机,那么最长的电话号码就是您的最大电话号码 - 20 应该可以轻松覆盖它! 防御性编程总是好的 :) ![/仅供参考]
【讨论】:
以上是关于数据库中的 Twitter 名称长度的主要内容,如果未能解决你的问题,请参考以下文章
Twitter文本js,不计算包含带有#的url的文本的长度!