<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>TiDB on 行间</title>
    <link>https://blog.songxinbai.com/tags/tidb/</link>
    <description>Recent content in TiDB on 行间</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Mon, 15 Dec 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.songxinbai.com/tags/tidb/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>TiDB系列(II)-一次字符串比较发现的 TiDB 排序规则“时空裂缝”</title>
      <link>https://blog.songxinbai.com/tech/tidb-collation-legacy-framework/</link>
      <pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.songxinbai.com/tech/tidb-collation-legacy-framework/</guid>
      <description>&lt;h2 id=&#34;一问题是如何被发现的&#34;&gt;一、问题是如何被发现的&lt;/h2&gt;&#xA;&lt;p&gt;事情的起点并不复杂, 用户反馈在两个 TiDB 集群上执行了同一条 INSERT：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-mysql&#34; data-lang=&#34;mysql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;INTO&lt;/span&gt; &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;job_status&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(process_time, name, message, run_id, status, create_time)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(&lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;2025-09-17 13:21:55&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;test&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;2025-09-17&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;START &amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;2025-09-17 13:21:55&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888;font-style:italic&#34;&gt;# 对应的表结构如下:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;TABLE&lt;/span&gt; &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;job_status&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  process_time &lt;span style=&#34;font-weight:bold&#34;&gt;datetime&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;NULL&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  name &lt;span style=&#34;font-weight:bold&#34;&gt;varchar&lt;/span&gt;(255) &lt;span style=&#34;font-weight:bold&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;NULL&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  message &lt;span style=&#34;font-weight:bold&#34;&gt;text&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;DEFAULT&lt;/span&gt; &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;NULL&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  run_id &lt;span style=&#34;font-weight:bold&#34;&gt;varchar&lt;/span&gt;(255) &lt;span style=&#34;font-weight:bold&#34;&gt;DEFAULT&lt;/span&gt; &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;NULL&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  status &lt;span style=&#34;font-weight:bold&#34;&gt;enum&lt;/span&gt;(&lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;START&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;IN_PROGRESS&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;SUCCESS&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;FAILURE&amp;#39;&lt;/span&gt;) &lt;span style=&#34;font-weight:bold&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;NULL&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  create_time &lt;span style=&#34;font-weight:bold&#34;&gt;datetime&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;DEFAULT&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;CURRENT_TIMESTAMP&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;font-weight:bold&#34;&gt;PRIMARY&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;KEY&lt;/span&gt; (process_time,name,status) &lt;span style=&#34;color:#888;font-style:italic&#34;&gt;/*T![clustered_index] NONCLUSTERED */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;) &lt;span style=&#34;font-weight:bold&#34;&gt;ENGINE&lt;/span&gt;=InnoDB &lt;span style=&#34;font-weight:bold&#34;&gt;DEFAULT&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;CHARSET&lt;/span&gt;=utf8mb4 &lt;span style=&#34;font-weight:bold&#34;&gt;COLLATE&lt;/span&gt;=utf8mb4_bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PARTITION &lt;span style=&#34;font-weight:bold&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;RANGE&lt;/span&gt; (&lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;MONTH&lt;/span&gt;(process_time))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(PARTITION JAN &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (2),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION FEB &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (3),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION MAR &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (4),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION APR &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (5),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION MAY &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (6),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION JUN &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (7),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION JUL &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (8),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION AUG &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (9),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION SEP &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (10),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION OCT &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (11),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION NOV &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (12),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; PARTITION &lt;span style=&#34;font-weight:bold&#34;&gt;DEC&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; LESS &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;THAN&lt;/span&gt; (MAXVALUE));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然而得到的结果却完全不同：&lt;/p&gt;</description>
    </item>
    <item>
      <title>TiDB系列(I)-从一段SQL来看TiDB和MySQL的差异</title>
      <link>https://blog.songxinbai.com/tech/tidb-mvcc-consistent-read/</link>
      <pubDate>Thu, 04 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.songxinbai.com/tech/tidb-mvcc-consistent-read/</guid>
      <description>&lt;h2 id=&#34;从一段sql开始&#34;&gt;从一段SQL开始&lt;/h2&gt;&#xA;&lt;p&gt;让我们以 TiDB v8.5.0和 MySQL 8.0 作为测试环境，先初始化测试数据&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-mysql&#34; data-lang=&#34;mysql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#888;font-style:italic&#34;&gt;# 首先初始化库和表以及测试需要的数据&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;DATABASE&lt;/span&gt; test;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;TABLE&lt;/span&gt; test.&lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;student&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    id &lt;span style=&#34;font-weight:bold&#34;&gt;INT&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;AUTO_INCREMENT&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;PRIMARY&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;KEY&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name &lt;span style=&#34;font-weight:bold&#34;&gt;VARCHAR&lt;/span&gt;(255) &lt;span style=&#34;font-weight:bold&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;NULL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;INTO&lt;/span&gt; test.&lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;student&lt;/span&gt; (name) &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; (&lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;John&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;INTO&lt;/span&gt; test.&lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;student&lt;/span&gt; (name) &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; (&lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;Alice&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;INTO&lt;/span&gt; test.&lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;student&lt;/span&gt; (name) &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; (&lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;Bob&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;font-weight:bold&#34;&gt;INSERT&lt;/span&gt; &lt;span style=&#34;font-weight:bold&#34;&gt;INTO&lt;/span&gt; test.&lt;span style=&#34;color:#666;font-weight:bold;font-style:italic&#34;&gt;student&lt;/span&gt; (name) &lt;span style=&#34;font-weight:bold&#34;&gt;VALUES&lt;/span&gt; (&lt;span style=&#34;color:#666;font-style:italic&#34;&gt;&amp;#39;Emma&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后我们分别在两个环境按照顺序执行下列SQL&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
