最近更新时间:2023.11.16 10:58:27
首次发布时间:2023.11.16 10:58:27
本节主要介绍 ByteHouse 云数仓版的 MySQL 模式与原生 MySQL 数据库的兼容性对比信息。
ByteHouse 云数仓版在 2.0 版本开始,增加了对 MySQL 5.7 和 MySQL 8.0 常用功能及语法的兼容,可以实现与 MySQL 客户端应用程序和工具的无缝集成。这将使用户能够使用熟悉的 MySQL 协议与 ByteHouse 进行交互,并利用 MySQL 生态系统的功能。
由于产品架构不同,或者客户需求不大,有些功能并没有被支持。本节主要从以下几方面介绍 ByteHouse 数据库的 MySQL 模式与原生 MySQL 数据库的不同:
如果您已经安装好 mysql client,您可以通过以下语法连接到 ByteHouse。
--访问命令 其中默认端口为9004 mysql --protocol tcp -h [hostname] -u [username] -P [port_number] --password=[password] --访问命令示例 mysql --protocol tcp -h 7277767706697666852-public.bytehouse-ce.volces.com -u bytehouse_test -P 9004 --password=P@55word
成功连接 ByteHouse 集群后,可查询现有数据库,参考语句如下。
show databases;
您可参考 ByteHouse CLI 快速入门连接到 ByteHouse,并使用 MySQL 语法操作 ByteHouse。
ByteHouse 数据库支持的数据类型有:
BOOL
/BOOLEAN
/TINYINT
、SMALLINT
、MEDIUMINT
、INT
/INTEGER
和 BIGINT
。DECIMAL
* 和 NUMERIC
。FLOAT
和 DOUBLE
。BIT
。DATETIME
、TIMESTAMP
、DATE
、TIME
* 和 YEAR
。CHAR
、VARCHAR
、BINARY
和 VARBINARY
。TINYBLOB
、BLOB
、MEDIUMBLOB
和 LONGBLOB
。TINYTEXT
、TEXT
、MEDIUMTEXT
和 LONGTEXT
。SET
。其中与 MySQL的差异包括:
DECIMAL
最大精度为76;;Current implementation of decimal in CNCH limits it to have max precision to be 76
Data
Date16 covers 1970 - 2149,Date32 covers the range from 1900-2299;TIME
. CNCH supports 3-9 digits of scales;TIMESTAMP
.Uses number types and convert to date time internally暂时不完全支持的类型包括:
Array
Map
Json
暂不支持MySQL以下函数:
函数差异 | |
---|---|
repeat(), | 参数传负数时会报错,MySQL上返回空或NULL |
exp() | 精度差异 |
ln() | 精度差异 |
bin() | ByteHouse返回结果会比MySQL多了0000的前缀 |
from_base64() | 传入错误的base64值会报错,MySQL上返回NULL |
cast() | 和ADB有差异,部分用法MySQL也不支持,转成boolean类型的结果是true/false,而不是1/0 |
avg() | avg()作用在空表上,cnch返回nan,mysql返回NULL |
min(), | cnch的默认值和MySQL不一致,数值类型默认值是0,MySQL上默认值为NULL,这时候计算min(),max()可能会受到这个影响导致结果不一致。可以在建表时加上Nullable()来规避此问题。 |
localtime() | 结果比MySQL上少了年月日 |
str_to_date() | 格式化参数和传入时间没有对齐的话,返回值有区别 |
通过设置 dialect_type='MYSQL',可以使下面列表中的函数按照 MYSQL 的方法执行。
ENABLE OPTIMIZER=1 SET dialect_type='MYSQL'; or [query] + SETTINGS dialect_type='MYSQL'; DESC TABLE t1 SETTINGS dialect_type='MYSQL'; or $CLICKHOUSE_CLIENT --dialect_type=MYSQL
以下函数的用法与MySQL有差异,使用时需注意:
函数名 | 差异 | 解 法 |
---|---|---|
if | 仅支持3个参数,2个参数需要改写 | |
log() | 不支持两个参数log(10,100) | 新增log_with_base()来支持2个参数的用法 |
rand() | mysql上是返回[0,1)的随机数,cnch上是返回UInt32整个范围的随机数 | 用randCanonical()来返回[0,1)的随机数 |
encrypt() | mysql里是2个参数即可,ck里需要3个参数,第一个参数指定加密算法 | encrypt('aes-128-ecb','abdABC123','1234567890123456'); |
data_format() | cnch中已有客户需求需要用data_format来做hive的format | cnch中用data_format_mysql来来提 |