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

news/2024/5/19 14:53:40 标签: tidb, mysql, 数据库, 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。

http://www.niftyadmin.cn/n/5239202.html

相关文章

Vue封装组件 父子组件相互传值

在Vue中,父子组件通信是非常常见的场景。以下是使用场景以及优缺点: 使用场景: 父组件需要向子组件传递数据:父组件需要将某些数据传递给子组件,以便子组件能够根据这些数据进行展示或执行某些操作。子组件需要向父组…

Graphpad Prism10.1.0 安装教程 (含Win/Mac版)

GraphPad Prism GraphPad Prism是一款非常专业强大的科研医学生物数据处理绘图软件,它可以将科学图形、综合曲线拟合(非线性回归)、可理解的统计数据、数据组织结合在一起,除了最基本的数据统计分析外,还能自动生成统…

深入浅出 Linux 中的 ARM IOMMU SMMU III

系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的 dma_alloc_coherent()/dma_alloc_attrs() 等接口。dma_alloc_coherent()/dma_alloc_attrs() 等接口通过 DMA IOMMU 的回调分配内存,并为经过 IOMMU 的 DMA 内…

OpenCV-python:图像像素类型转换与归一化

目录 1.图像像素类型转换 2. 图像像素转换适用情形 3.图像归一化 4.归一化方法支持 5.归一化函数 6.知识笔记 1.图像像素类型转换 图像像素类型转换是指将图像的像素值从一种类型转换为另一种类型。常见的像素类型包括无符号整数类型(如8位无符号整数、16位无符…

【数据结构和算法】到达首都的最少油耗

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、复杂度分析 前言 这是力扣的2477题,难度为中等,解题方案有很多种&…

算法基础六

搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入: nums [1,3,5,6], target 2 输…

Emacs之dired模式重新绑定键值v(一百三十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

一起学docker系列之十八Docker可视化工具 Portainer:简介与安装

目录 前言1 简介2 安装过程2.1 创建docker容器数据卷2.2 构建运行protainer容器 3 Portainer 软件详细说明与界面导览3.1 查看本地Docker情况3.2 操作功能3.3 创建容器3.4 部署容器 4 Portainer的优势结语参考地址 前言 Docker作为容器化解决方案的热门工具,其可视…