存储URL的适当字符编码/排序规则是什么?

6

我的Web应用程序将URL段存储在数据库中。这些URL段基于用户提交的内容。

哪种排序规则应该用于出现在URL中的字符字符串?

我假设是ASCII General CI排序规则,根据这个问题:哪些字符会使URL无效?

2个回答

3
据我所知,与URL相关的字符在我所知的任何字符集中都是有效的,因此在表和列之间不应使用不同的排序方式-任何尝试将它们连接或执行任何其他类型的跨列或跨表操作都会导致“排序混合不当”的问题(请参见我的最近的问题这里)。
如果我说错了,请纠正我。

那么,使用UTF-8 General CI而不是可以存储相同数据的“更简单”的编码(ASCII General CI)是否存在性能因素? - Dolph
我不是数据库专家,所以不能确定,但从逻辑上来说,不会有任何问题,因为你提到的字符在标准ASCII和UTF-8排序中都占用一个字节。我相信任何额外开销都应该是微不足道的。 - Pekka
我认为不区分大小写编码(ascii_general_ci)比 ascii_bin 更慢,因为数据库引擎需要在执行实际比较之前将两个值转换为相同的大小写。 - vitsoft
2
@Pekka웃 如果像电话号码或URL这样的东西使用utf8mb4而不是ascii,只有在存储空间是问题(我怀疑)或者真正的问题是,如果您正在使用索引中的列。如果您有一个URL字段,它的varchar(256)具有ascii编码,则键长度为256,但是如果您使用utf8mb4,则键大小必须为1024,以支持该列包含多字节字符的可能性,这比InnoDB允许的键大小要大。 - Brian Leishman

1
我认为大小写敏感性很重要,因为您不希望从URL / home和/ Home获得重复的内容。 这是2个不同的页面,_ci排序中的mysql查询(select * from page where url='/Home')将返回页面,而不考虑大小写。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接