在應用層面,用 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 等寫入操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM