排名规则

生意有做生意的学问。经营什么样的宝贝最适合你?使用什么办法能使你的店铺增加人气?采取什么策略让你的宝贝在成千上万的同类商品中脱颖而出?在小文的帮助下,你就能了解淘宝的秘密,并从网络技术的角度给出自

己的答案! 
一、 淘宝首页的搜索规律

此处考虑的是商品关于普通关键字的排名。在关键字的选择上,为了避免淘宝对部分热门关键字商品的排序进行人为影响,我们选择一组比较冷的关键字进行测试。在淘宝首页搜索栏搜索商品,通过对结果的对比,可以

得出以下几个规律

1、无关因素规律

排名先后与售出量、浏览量、价格、卖家好评率、先行赔付、所在地、商品页面的排版布局和单一关键字在商品名称中出现的先后顺序、次数等因素基本无关。例如“火星湖专卖,火星湖折扣电影”的商品和名为“火星

湖电影票”的商品比较,在搜索“火星湖”关键字的时候,前一种商品不会因为“火星湖”关键字出现了两次或者售出量多等因素而在搜索结果中排名靠前。

2、搜索结果排名规律

影响商品排名的关键因素有两个,分别是“剩余时间”和“是否推荐商品”。其中的剩余时间=宝贝有效期-(当前时间-发布时间)。宝贝有效期有两种取值,分别是14和7,对应与产品发布时选择的有效期,发布时间

就是你的宝贝上架的时间。“推荐商品”这个因素对应于我们发布商品时的“橱窗推荐”选项。搜索结果根据是否“橱窗推荐”商品这个因素,被划分为两个区段,无论剩余时间是多少,推荐商品的区段排名都在未推荐商品

区段的前面,同一区段内,剩余时间越短,排名越靠前。例如:即便“火星湖电影票”商品还有5分钟就要下架了,如果它没有被勾选为橱窗推荐商品,他的排名还是比刚刚发布出来的橱窗推荐商品“火星湖折扣电影票”靠后

。如果同样都是橱窗推荐商品,那么快要下架的“火星湖电影票”会排在前面。

3、等效搜索词规律

1) 第一关键词+第二关键词=第一关键词+特殊字符+第二关键词即紧密排列规律,搜索时特殊字符将被忽略,搜索结果不含拆分(即搜索结果中多个关键词按照顺序紧密相连)。

2) 第一关键词+空格+第二关键词=第二关键词+空格+第一关键词,即顺序无关规律,用空格分割两个关键词搜索的结果中含拆分(即搜索结果中既有多个关键词紧密相连又有多个关键词不紧密相连的情况),关键

词出现顺序和搜索时的顺序无关。例如搜索“火星湖电影票”,那么标题为“电影票5折珠海火星湖”和“珠海火星湖电影票5折”这两种情况都将被搜索到。同时无论搜索的结果含不含拆分,排名一定严格按照搜索结果排名

规则来排序。  

经过大量测试,淘宝基本没有对关键字排名进行干预,搜索符合上述三条规律

二、高级搜索页搜索规律

淘宝高级搜索页搜索所得出的结果和首页搜索的结果很大差别,搜索不再以剩余时间为主要的排名依据,通过分析结果得到以下一些规律。首先,通过高级搜索页搜出来的结果默认显示的是“人气宝贝”列表中的宝贝,

这个列表的排名显然不是以剩余时间来排序的,经过测试,我们发现影响人气宝贝列表排名的因素主要是浏览量、售出量、卖家等级(信誉值)这几个因素。淘宝经过一定的权值计算后,给出了最终列表的顺序。并且这个顺

序十分不稳定,顺序经常发生变化,这主要是由于商品浏览量的变化导致的。由此可以说明,浏览量对排名因素的作用高于其他因素。此外,页面上还有“所有宝贝”选项,经过分析,所有宝贝选项卡中的商品排列顺序完全

符合第一点中的三条规律.

三、淘宝商家应对的优化策略

实际进入高级搜索页来搜索商品的买家相对较少,大部分买家一般都在首页搜索栏进行搜索。并且在高级搜索页面进行第二次搜索时,实际上采用的仍然是首页搜索的机制,所以在考虑店铺优化时,可先暂时规避因为高

级搜索规律所带来的复杂度,集中考虑普通搜索的三个规律的优化策略。

1、 标题的充分利用

首先举一个简单的例子。假设要卖珠海火星湖折扣电影票,应该如何发布呢?可以选择的商品标题常用有“珠海家园电影票,火星湖5.5折,双钻信誉”(以下称第一种标题),或者“珠海家园,火星湖电影票5.5折,双

钻信誉” (以下称第二种标题)。买家一般会在首页的搜索栏里搜索“火星湖电影票”或“火星湖 电影票”,且以无空格的前者居多。以带空格的“火星湖 电影票”搜索时,两种标题都能被搜索到。而根据上述紧密排列规

则,用不带空格的“火星湖电影票”(紧密排列)作为关键字时,搜索结果将不含拆分,于是第一种标题被漏掉了,我们的宝贝没有被搜索出来,这是个失败的标题。再来看“珠海电影票”的搜索,根据顺序无关规律,搜索

的结果中将包含拆分,并且拆分以后的关键字顺序不影响排名,第二种标题仍然能够被搜索到。所以应该选择第二种标题。 等效搜索词规律告诉我们,在宝贝有多种属性的时候,应该把联系最紧密的属性和宝贝的名称写在一

起。紧密排列和关键字组合是门学问,它让你能够提高宝贝被搜索到的概率。当然,仅仅用第二种标题还是远远不够的。综合所有规律,宝贝是否能够被搜索到,取决于宝贝的标题里是否含有关键字,以及关键字是否正确组

合。淘宝规定宝贝的标题最长不能超过60个字节,也就是30个汉字,在组合理想的情况下,包含越多的关键字,被搜索到的概率就越大。第二种标题总共35个字节(半角符号一个字节),浪费了25个字节,大约10个汉字,这种

浪费是很可惜的。

2、 标题关键字的分割

如果一点都不分割标题,会使整个标题看上去一团糊涂,比如“珠海家园火星湖电影票5.5折双钻信誉……”这么多字没有一个标点符号,完全不断句,虽然有利于增加被搜索到的概率,但是会让买家看得很辛苦甚至厌烦

,所以,少量而必要的断句是应该的。而且断句符号的选择也是门学问,经过测试,在使用半角都好的情况下,搜索引擎认为逗号的两边完全是不同的词句,进而硬性割裂;而使用其他一些符号比如/.^或者是半角空格,虽然

标题看上去有断句,但搜索引擎在处理的时候会按照紧密排列规律,忽略这些特殊符号的存在。第二种标题除了增加字数以外,还有改进的余地,那就是把中间的半角逗号全部替换为/符号,如此一来,本来搜索“家园火星湖

”时因为逗号分割而不被搜索出来的标题,由于/被忽略也将能够被搜索出来。这样,不仅在标题上断句分明使人一目了然,而且在搜索时等同于没有断句的情况。用一个玩笑做例子,如果你的宝贝标题是“珠海家园咸猪肉/

荣获国家优质奖”,那么搜索“猪肉荣”的买家也能搜索到你的宝贝,无关乎他崇拜他的黄飞鸿你卖你的咸猪肉。

3、 排名尽量靠前

经过上面这些优化步骤,相信你的宝贝一定能够被淘宝的搜索引擎亲密接触到,点击进来并产生效益。假设我们的宝贝排名是66页第20个,哪个买家有这个耐心翻66页区找我们那可怜的宝贝,不用着急,关于排名我们还

有好办法。理解以下搜索结果排名规律可以知道,淘宝的默认排名制度是轮流坐庄制,也就是说剩余时间越少,排名越靠前,考虑到选择“橱窗推荐”商品会在搜索结果中第一优先,并且我们在发布商品的时候,增加剩余时

间趋近于0的频率,我们在选择宝贝有效期的时候,一定要选择7天。关于橱窗数量规则和获得橱窗奖励的办法,我们可以参考官方公告

4、 什么时间发布商品最合适

乍一看这个问题很难回答,但换一种问法,什么时候上网购物的人最多,生意最好做?当然是周六日啦!我们发布的宝贝要正好在周六日的时候排名最靠前,也就是剩余时间最短!因此可以选择在周日的晚上8:30来添加

商品,那么,一周以后的周六,宝贝的剩余时间就剩下1天多,如果同类商品不是很多,基本上就是可以排名更加靠前,买家第一眼就可以看到,在辅以一定的价格优势,点击率就上去了。经过一周时间宝贝才能排名靠前,等

待的时间实在太长,而排名在前面的时间又那么短暂,有什么别的办法吗?淘宝规则不允许重复发布商品,否则会被管理员删除,我们可以围绕主要关键字来构造同一个商品的不同名称进行发布,只要保证关键字和实际的商

品对应就可以获得买家的访问。间隔一定时间,发布不同名但实质相同的产品,就可以带来点击率的增加。每隔一天发布一种同样不同名的宝贝,就能使这宝贝每天都在搜索结果中占据有利排名,从而规避因为7天时长带来的

大部分时间宝贝排名靠后的情况。当然,重复商品名称和内容需要构得相当巧妙,否则会被删除。

5、 加开店铺

用你家人的银行账户再开一个店铺,发布同名商品,就可以保证这种商品连续排名靠前,即使前面宝贝的剩余时间到期了,后面商品的剩余时间又已经足够小而排名在前面。增加了店铺和商品,意味着增加了被搜索到的

概率,你开的店铺像一个超市而不是只有一个几平米的小卖部,能够形成交易的概率也因此增大了。唯一的缺陷是,要经营多个小店、多种商品,你需要拥有一定的技术以及花费大量的精力,需要权衡你付出的精力和销售量

上涨之间的关系。用最经济的办法,取得最大的利润,才是可取的。最后考虑高级搜索页的搜索规律,要取得高级搜索结果中的较好排名,精力就主要集中在浏览次数、本期输出量、卖家等级(信誉值)、剩余时间这些因素

上。起步总是困难的,你的东西不够吸引力,价格太高,在高级搜索中和高手们是没有办法竞争的,售出量不多、卖家等级不高也会使你的商品排名靠后。只有使你的内力、外功和各种武器装备都上去了,你的排名才会升高。

<think>嗯,用户想了解MySQL排序规则的相关信息,这是一个关于数据库基础知识的明确需求。从提供的引用内容来看,用户已经收集了相当全面的参考资料,但需要系统化的整理。 用户可能正在配置数据库或遇到排序相关问题,需要从原理到实践的整体认知。尤其关注排序规则的实际影响和应用场景,比如大小写敏感性问题。引用[4]中提到的_ci、_cs、_bin后缀分类特别重要,这应该是用户的核心关注点。 注意到引用[5]提到了选择困难的问题,用户潜意识里可能还想知道如何根据业务场景选择排序规则。比如utf8_general_ci和utf8_unicode_ci的区别不仅在准确性,实际业务中要考虑多语言支持场景。 整理回答框架时需要考虑:先定义概念,再说明字符集关系,重点解析三类排序规则特征,最后给出选择建议。特别要强调引用[3]展示的字段级覆盖功能,这是很多开发者容易忽略的细节。 用户引用的资料已经覆盖了关键点,但需要补充具体示例增强理解。比如说明_bin规则如何影响'Apple'和'apple'的排序顺序,这类案例能帮助用户建立直观认知。表格对比会是不错的呈现方式,但要注意确保在纯文本环境下也能清晰阅读。 </think>好的,我们来详细介绍一下 MySQL 中的排序规则(Collation)。 **MySQL 排序规则(Collation)详解** 排序规则是数据库中一个 **定义字符串如何比较、排序和匹配** 的关键概念。它和字符集(Character Set)紧密相关,但关注点不同: 1. **字符集 (Character Set)**: * 定义数据库能存储哪些字符(如 ASCII、Latin1、UTF8、GBK 等)。 * 指定每个字符(字母、数字、符号)内部如何用二进制表示(编码)。 2. **排序规则 (Collation)**: * 定义字符集中字符的 **比较规则** 和 **排序顺序**。 * 相同字符集可以有多个不同的排序规则,每种规则决定了字符串比较时的特性(例如是否区分大小写、是否区分重音、是否区分特定语言规则等)。 * 当你在数据库中进行 `ORDER BY`、`GROUP BY`、使用索引查找字符串、进行 `DISTINCT` 操作或使用 `WHERE column = 'value'` 等操作时,排序规则直接影响结果[^1][^2][^4]。 **排序规则的核心特性** 排序规则的名称通常包含后缀来表示其关键行为: * `_ci` (Case Insensitive):**大小写不敏感**。这是最常见的类型(如 `utf8_general_ci`, `utf8mb4_0900_ai_ci`)。在这种规则下,`'APPLE'`, `'apple'`, `'Apple'` 被认为是相同的。 * `WHERE name = 'apple'` 会匹配 `'Apple'`, `'APPLE'` 等。 * `ORDER BY name` 排序时,大小写不同的单词可能混合排列在一起。 * `_cs` (Case Sensitive):**大小写敏感**(如 `utf8_bin` 在某些语境下可以模拟,更准确的如 `utf8mb4_0900_as_cs`)。在这种规则下,`'APPLE'`, `'apple'`, `'Apple'` 被认为是三个不同的字符串。 * `WHERE name = 'apple'` 只会精确匹配 `'apple'`。 * `ORDER BY name` 排序时,通常所有大写字母排在小写字母之前(取决于具体排序规则)。 * `_bin` (Binary):**二进制比较**(如 `utf8_bin`, `latin1_bin`)。这是最严格的比较方式,基于字符的数字编码值(字节)进行比较,**不遵循任何特定的语言规则**。它也**区分大小写**(因为大小写字母的编码值不同)。 * 比较速度通常最快(因为简单按字节值比较)。 * 排序结果可能不符合人类的字母表顺序(例如 'Z' 可能排在 'a' 前面,因为 Z 的 ASCII 值 90 小于 a 的 97)。 * 严格区分所有字符差异,包括重音符号(é vs e)等[^1][^2][^4]。 **排序规则与字符集的关系** * 每个字符集都有一个 **默认的排序规则**。例如,`utf8mb4` 的默认排序规则在 MySQL 8.0 中通常是 `utf8mb4_0900_ai_ci`。 * 一个字符集可以对应 **多个排序规则**。例如,`utf8mb4` 支持的排序规则包括 `utf8mb4_general_ci`, `utf8mb4_unicode_ci`, `utf8mb4_0900_ai_ci`, `utf8mb4_bin` 等等。 * **两个不同的字符集不能拥有相同的排序规则名称**。 * 排序规则名称通常包含了其关联的字符集(如 `utf8_general_ci` 关联 `utf8` 字符集)[^1][^4]。 **排序规则的层级和作用范围** 排序规则可以在不同层级设置,具有继承关系(从粗粒度到细粒度): 1. **服务器级**:MySQL 服务器实例的默认字符集和排序规则(在配置文件 `my.cnf` / `my.ini` 或启动参数中设置)。 2. **数据库级**:创建数据库时可以指定其默认字符集和排序规则。如果未指定,则继承服务器级设置。 ```sql CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 3. **表级**:创建表时可以指定其默认字符集和排序规则。如果未指定,则继承数据库级设置。 ```sql CREATE TABLE mytable ( ... ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` 4. **列级(字段级)**:这是最精细的控制。可以在定义表的列时,为特定列指定不同于表默认值的字符集和排序规则。这是覆盖默认行为的关键方式[^3]。 ```sql CREATE TABLE users ( id INT PRIMARY KEY, username VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin, -- 强制此列大小写敏感(二进制比较) email VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ); ``` 5. **表达式/查询级**:在 SQL 语句中,可以使用 `COLLATE` 子句为特定的字符串比较或排序操作临时指定排序规则,覆盖列默认的规则。 ```sql SELECT * FROM users WHERE username = 'Admin' COLLATE utf8mb4_bin; -- 临时在此查询中对此条件进行大小写敏感比较 SELECT * FROM products ORDER BY product_name COLLATE utf8mb4_swedish_ci; -- 临时按瑞典语规则排序 ``` MySQL 也提供了一些函数来修改或操作排序规则(如 `CONVERT(... USING ...)`, `CAST(... AS ... CHARACTER SET ...)` 通常也隐含了排序规则的改变)[^2]。 **如何查看排序规则** * **查看服务器默认:** ```sql SHOW VARIABLES LIKE 'character_set_server'; SHOW VARIABLES LIKE 'collation_server'; ``` * **查看数据库默认:** ```sql USE your_database_name; SELECT @@character_set_database, @@collation_database; -- 或者 SHOW CREATE DATABASE your_database_name; ``` * **查看表默认:** ```sql SHOW TABLE STATUS LIKE 'your_table_name'\G -- 查看结果中的 Collation 列 -- 或者(更详细,包含列级覆盖信息) SHOW CREATE TABLE your_table_name\G ``` * **查看列默认:** 如上面 `SHOW CREATE TABLE` 的输出结果所示,如果某列没有显示 `COLLATE` 子句,则使用表默认的排序规则;如果显示了,则以显示的为准[^3]。 **如何更改排序规则** 1. **更改服务器/数据库/表默认:** 使用相应的 `ALTER` 语句(谨慎操作,会影响新创建的对象)。 ```sql ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 这会转换表中所有列(除非列有特定设置) ``` 2. **更改列排序规则:** ```sql ALTER TABLE your_table_name MODIFY your_column_name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin; -- 修改列定义并更改排序规则 ``` 3. **在查询中临时指定:** 如前所述,使用 `COLLATE` 子句。 **如何选择合适的排序规则?** [^5] 1. **理解需求:** * **是否需要区分大小写?** 用户登录名 (`username`) 通常需要区分 (`_cs` 或 `_bin`),而邮箱 (`email`)、用户名 (`name`) 通常不区分 (`_ci`)。 * **是否需要精确的特定语言排序?** 对于特定语言的应用(如德语、瑞典语、土耳其语),选择对应的 `unicode` 系列规则(如 `utf8mb4_german2_ci`, `utf8mb4_turkish_ci`) 能提供更符合语言习惯的排序(例如处理 `ö`, `ü`, `ß` 等字符)。`_unicode_ci` / `_0900_ai_ci` 通常比 `_general_ci` 更符合 Unicode 标准,支持更多语言规则。 * **是否需要纯二进制比较?** 存储哈希值、UUID 或需要严格按字节值比较/排序时选择 `_bin`(速度快且绝对精确)。 * **性能和存储?** `_bin` 通常最快(只比较数字),其次是 `_general_ci`, `_unicode_ci` / `_0900_ai_ci` 通常更复杂精确但可能稍慢。 2. **常见选择:** * **通用推荐(现代MySQL版本):** `utf8mb4_0900_ai_ci` (Unicode 9.0, 口音不敏感,大小写不敏感)。这是 MySQL 8.0 中 `utf8mb4` 的默认规则。 * **历史通用(兼容旧版本或行为):** `utf8mb4_general_ci` (相对简单快速,但语言规则处理不如 `unicode` 精确)。 * **需要大小写敏感:** * 语言精确排序首选:`utf8mb4_0900_as_cs` (Unicode 9.0, 口音敏感,大小写敏感)。 * 纯二进制首选:`utf8mb4_bin` (严格按字节比较)。 * **特定语言:** 选择对应语言的排序规则(如 `utf8mb4_spanish_ci`, `utf8mb4_danish_ci`)。 * **存储二进制数据:** `utf8mb4_bin` 或直接使用 `BINARY` / `VARBINARY` 类型。 **总结:** 排序规则是 MySQL 中管理字符串比较行为(大小写、重音、语言规则)的核心机制。它与字符集配合工作,可以在服务器、数据库、表、列甚至单个查询级别进行设置。选择合适的排序规则对于确保字符串操作的预期结果(搜索、排序、唯一性约束等)至关重要,需要根据应用的具体需求(大小写敏感度、语言支持、精度要求、性能)来决定。最常用的规则是大小写不敏感的 `_ci` 规则,如 `utf8mb4_0900_ai_ci` 或 `utf8mb4_general_ci`[^1][^2][^4][^5]。 --- **相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值