当前位置: 首页 > news >正文

TiDB专题---3、TiDB与MySQL兼容性对比

TiDB与MySQL兼容性对比

  • TiDB支持MySQL传输协议及其绝大多数的语法。这意味着您现有的MySQL连接器和客户端都可以继续使用。大多数情况下您现有的应用都可以迁移至 TiDB,无需任何代码修改。
  • 当前TiDB服务器官方支持的版本为MySQL5.7。大部分MySQL运维工具(如PHPMyAdmin, Navicat, MySQL Workbench等),以及备份恢复工具(如 mysqldump,Mydumper/myloader)等都可以直接使用。
  • 不过一些特性由于在分布式环境下没法很好的实现,目前暂时不支持或者是表现与MySQL有差异。
  • 一些MySQL语法在TiDB中可以解析通过,但是不会做任何后续的处理,例如CreateTable语句中Engine,是解析并忽略。

TiDB不支持的MySql特性

  • 存储过程与函数
  • 触发器
  • 事件
  • 自定义函数
  • 外键约束
  • 临时表
  • 全文/空间函数与索引
  • 非 ascii/latin1/binary/utf8/utf8mb4 的字符集
  • SYS schemaMySQL 追踪优化器
  • XML 函数
  • X-Protocol
  • Savepoints
  • 列级权限
  • XA 语法(TiDB 内部使用两阶段提交,但并没有通过 SQL 接口公开)
  • CREATE TABLE tblName AS SELECT stmt 语法
  • CHECK TABLE 语法
  • CHECKSUM TABLE 语法
  • GET_LOCK 和 RELEASE_LOCK 函数

自增ID

TiDB 的自增列仅保证唯一,也能保证在单个 TiDB server 中自增,但不保证多个 TiDB server 中自增,不保证自动分配的值的连续性,建议不要将缺省值和自定义值混用,若混用可能会收 Duplicated Error 的错误信息。

TiDB 可通过 tidb_allow_remove_auto_inc 系统变量开启或者关闭允许移除列的 AUTO_INCREMENT 属性。删除列属性的语法是:alter table modify 或 alter table change。

TiDB 不支持添加列的 AUTO_INCREMENT 属性,移除该属性后不可恢复。

SELECT 的限制

  • 不支持 SELECT … INTO @变量 语法。
  • 不支持 SELECT … GROUP BY … WITH ROLLUP 语法。
  • TiDB 中的 SELECT … GROUP BY expr 的返回结果与 MySQL 5.7 并不一致。MySQL 5.7 的结果等价于 GROUP BY expr ORDER BY expr。而 TiDB 中该语法所返回的结果并不承诺任何顺序,与 MySQL 8.0 的行为一致。

视图

目前TiDB不支持对视图进行UPDATE、INSERT、DELETE等写入操作。

默认设置差异

字符集

  • TiDB 默认:utf8mb4。
  • MySQL 5.7 默认:latin1。
  • MySQL 8.0 默认:utf8mb4。

排序规则

  • TiDB 中 utf8mb4 字符集默认:utf8mb4_bin。
  • MySQL 5.7 中 utf8mb4 字符集默认:utf8mb4_general_ci。
  • MySQL 8.0 中 utf8mb4 字符集默认:utf8mb4_0900_ai_ci。

大小写敏感

关于lower_case_table_names的配置

  • TiDB 默认:2,且仅支持设置该值为 2。
  • MySQL 默认如下:
    • Linux 系统中该值为 0
    • Windows 系统中该值为 1
    • macOS 系统中该值为 2
参数解释
  • lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
  • lower_case_table_names =1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
  • lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的

timestamp类型字段更新

默认情况下,timestamp类型字段所在数据行被更新时,该字段会自动更新为当前时间,而参数explicit_defaults_for_timestamp控制这一种行为。

  • TiDB 默认:ON,且仅支持设置该值为 ON。
  • MySQL 5.7 默认:OFF。
  • MySQL 8.0 默认:ON。
参数解释
  • explicit_defaults_for_timestamp=off,数据行更新时,timestamp类型字段更新为当前时间
  • explicit_defaults_for_timestamp=on,数据行更新时,timestamp类型字段不更新为当前时间。

外键支持

  • TiDB 默认:OFF,且仅支持设置该值为 OFF。
  • MySQL 5.7 默认:ON。

相关文章:

  • python提取通话记录中的时间信息
  • 概率论与数理统计-第五章 数理统计的基础知识
  • 二叉树的实现(纯C语言版)
  • Backend - Django JsonResponse HttpResponse
  • Golang实践录:读取xml配置文件
  • 堆排序详细解读
  • 应急响应-挖矿病毒处理
  • 掌握 Go 语言中的循环结构:从基础到高级
  • ESP32 LVGL Gui-Guider的移植
  • openGauss学习笔记-141 openGauss 数据库运维-例行维护-例行重建索引
  • Python面向对象练习
  • php轻量级性能分析工具 xhprof
  • 场景实践 | 法大大落地业财一体化,优化流程结构
  • SpringBoot之整合JWT
  • 深度学习机器视觉车道线识别与检测 -自动驾驶 计算机竞赛
  • 08.Android之View事件问题
  • 30天自制操作系统-2
  • Bootstrap JS插件Alert源码分析
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript实现分页效果
  • Java-详解HashMap
  • js算法-归并排序(merge_sort)
  • Laravel核心解读--Facades
  • Material Design
  • rabbitmq延迟消息示例
  • supervisor 永不挂掉的进程 安装以及使用
  • 大整数乘法-表格法
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 关于extract.autodesk.io的一些说明
  • 解决iview多表头动态更改列元素发生的错误
  • 来,膜拜下android roadmap,强大的执行力
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 线上 python http server profile 实践
  • 小李飞刀:SQL题目刷起来!
  • 一天一个设计模式之JS实现——适配器模式
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • 积累各种好的链接
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • (¥1011)-(一千零一拾一元整)输出
  • (1)(1.13) SiK无线电高级配置(六)
  • (1)bark-ml
  • (11)MSP430F5529 定时器B
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (力扣题库)跳跃游戏II(c++)
  • (四)图像的%2线性拉伸
  • (转)Mysql的优化设置
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • *p++,*(p++),*++p,(*p)++区别?
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net程序集学习心得
  • /dev下添加设备节点的方法步骤(通过device_create)