在应用层面,用 TiDB 替代 MySQL 的可行性调研

本次调研主要考虑在应用层面,用 TiDB 替代 MySQL 的可行性。

1 数据类型

1.1 数值类型

Type TiDB MySQL
BIT
BOOL/BOOLEAN
TINYINT x
SMALLINT
MEDIUMINT
INT/INTEGER
BIGINT
FLOAT
DOUBLE
DECIMAL

在 TiDB 中,FLOAT数据类型默认的精度是 8 位,这与 MySQL 不同。在 MySQL 中,FLOAT数据类型默认的精度是 6 位。

1.2 日期和时间类型

Type TiDB MySQL
DATE
TIME
DATETIME
TIMESTAMP
YEAR

1.3 字符串类型

Type TiDB MySQL
CHAR/VARCHAR
BINARY/VARBINARY
TINYBLOB/BLOB/MEDIUMBLOB/LONGBLOB
TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT
ENUM
SET

1.4 其他类型

Type TiDB MySQL
JSON
Spatial Data Types x

TiDB v4.0(Stable) 版本中JSON功能为实验特性,不建议在生产环境中使用。

2、数据比较(函数与操作符)

TiDB 中函数和操作符使用方法与MySQL基本一致。涉及上一小节所述数据类型的比较,TiDB 与MySQL v5.7大致相同。下面列出部分差异:

2.1 TiDB 不支持函数

  • 字符串函数
    • LOAD_FILE()
    • MATCH
    • SOUNDEX()
    • SOUNDS LIKE
    • WEIGHT_STRING()
  • 加密和压缩函数
    • 在 MySQL 5.7 中被废弃,并且已在 MySQL 8.0 中移除的函数:DES_DECRYPT()、DES_ENCRYPT()、OLD_PASSWORD() 和 ENCRYPT()
    • VALIDATE_PASSWORD_STRENGTH()
    • 其他仅在MySQL企业版中支持的函数
  • 信息函数
    • CHARSET()
    • COERCIBILITY()
    • COLLATION()
  • JSON函数(TiDB v4.0版本的实验性功能)
    • JSON_MERGE_PATCH
    • JSON_PRETTY
    • JSON_ARRAYAGG
  • GROUP BY修饰符,例如WITH ROLLUP,将来会提供支持(参阅#4250
  • 其他函数
    • GET_LOCK()
    • RELEASE_LOCK()
    • UUID_SHORT()
    • MASTER_WAIT_POS()

3 数据结构

3.1 外键约束

为了便于其他数据库向TiDB 迁移,TiDB 支持在建表时创建外键约束,也支持使用ALTER TABLE命令来删除外键(DROP FOREIGN KEY)和添加外键(ADD FOREIGN KEY)。但是,TiDB 不会在DML语句中对外键进行约束检查。

3.2 视图

TiDB 中把视图视为一张虚拟表,用于隐藏底层表敏感字段和数据,以及简化查询。 TiDB 在真正执行查询视图时,会将视图展开成创建视图时定义的 SELECT 语句,进而执行展开后的查询语句。
对视图的操作仅限于createdrop以及使用SHOW CREATE TABLE view_nameSHOW CREATE VIEW view_nameINFORMATION_SCHEMA.VIEWS等查看视图的相关信息。
TiDB 中视图为只读视图,不支持对视图进行 UPDATE、INSERT、DELETE、TRUNCATE 等写入操作。

posted @ 2021-03-11 14:53  Theo·Chan  阅读(1212)  评论(0编辑  收藏  举报