You need to enable JavaScript to run this app.
文档中心
ByteHouse 企业版

ByteHouse 企业版

复制全文
下载 pdf
兼容性说明
MySQL 兼容性
复制全文
下载 pdf
MySQL 兼容性

ByteHouse 企业版在 2.4.0 版本开始,增加了对 MySQL 5.7 和 MySQL 8.0 常用功能及语法的兼容,可以实现与 MySQL 客户端应用程序和工具的无缝集成。这将使用户能够使用熟悉的 MySQL 协议与 ByteHouse 企业版进行交互,并利用 MySQL 生态系统的功能。

说明

请在 ByteHouse 2.4 及以上版本使用此功能,并建议您升级到最新版本以获得更好的支持。
升级方法:火山引擎控制台 > 集群管理 > 集群列表 > 集群详情 > 基本信息 > 引擎版本 > 版本变更
Image

协议兼容情况

通过 MySQL Client 命令行连接

  1. 如果您已经安装好 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=XXXXXX

Image

  1. 成功连接ByteHouse集群后,可查询现有数据库,参考语句如下。
show databases;

Image

通过 ClickHouse Client 命令行连接

您可参考 ClickHouse Client 连接到 ByteHouse,并使用 MySQL 语法操作 ByteHouse。
Image

语法兼容情况

支持但需要设置模式

部分 MySQL 函数,与 ClickHouse 模式下的同名函数存在冲突。
因此,在使用时需要设置 dialect_type='MYSQL',举例如下:

select adddate('2022-01-22',interval '3' day) settings dialect_type='MYSQL';

目前需要设置方言才能使用的查询,包括但不限于:

  1. 函数 Function
    1. adddate
    2. date_sub
    3. subdate
    4. concat_ws
    5. format AS
  2. DQL:
    1. union except

与 MySQL 有差异的特性详细说明

  1. locate:ByteHouse 企业版运算逻辑和 MySQL 不同,所以需要设置方言才能够保持一致
  2. cast:在 MySQL 模式下,部分函数返回值与 ClickHouse 模式下不同(主要为类型默认值的差异),部分在 ClickHouse 模式下会报错。如
    1. 返回值不同:
      1. SELECT cast(4.3 AS boolean);
    2. 报错:
      1. SELECT cast('a' AS boolean);
      2. SELECT cast( 'China' AS decimal(5,2));
      3. SELECT cast('China' AS smallint);
      4. SELECT cast('a' AS bigint);
      5. SELECT cast(date '2021-09-18' AS bigint);
      6. SELECT cast( date '2021-09-17' AS double);
      7. SELECT cast(timestamp '2001-1-22' AS time);
  3. avg函数的内置类型默认值不同,结果为空时,ClickHouse 模式下 返回nan,MySQL返回NULL
  4. min、max:ByteHouse 数值类型默认值为0,MySQL上为NULL,这样会导致两者上min,max结果不同

暂无计划支持的问题

  1. log函数不支持使用两个参数的用法。
    1. MySQL支持;
    2. ByteHouse 可使用log_with_base作为替代;
  2. rand函数的结果范围。
    1. MySQL返回的是范围是0~1;
    2. ByteHouse 上用randCanonical()来返回[0,1)随机数;
  3. round函数的差异。
    1. ByteHouse 返回结果末尾是0会省略,如SELECT round(345.983,1);在ByteHouse 返回346,abd和MySQL返回346.0;
  4. curdate函数不加小括号语法报错。
    1. MySQL支持;
    2. 使用select curdate时报错,ByteHouse 需要加括号select curdate();
  5. date_format函数不同。
    1. 目前ByteHouse 中dateformat已经被占用所以可用date_format_mysql代替date_format;
  6. 部分非标准用法的参数不支持,如:
    1. 非yyyy-mm-dd标准用法:select datediff('2022-01-22 23:59:59','2022-1-21') settings dialect_type='MYSQL';
    2. 非hh-mm-ss标准用法:select subtime('2022-10-31 23:59:59','0:1:1');
  7. dayofweek函数的返回值不同。
    1. ClickHouse dialect下和ClickHouse一致,MySQL dialect下和MySQL、adb返回值相同;
  8. localtime返回值格式不同。
    1. MySQL返回年月日+时间,ByteHouse 只返回时间且ClickHouse的时间有三位小数;
    2. ByteHouse 可使用localtimestamp()替代;
  9. 时间函数在计算时间时,时间范围和MySQL不同。
    1. 目前time只支持00:00:00 - 23:59:59;MySQL会返回一个负值,ByteHouse 不会返回负值;
      1. select maketime(-1,15,30);
      2. select sec_to_time(86401);
      3. select subtime(date '2022-10-31','00:01:01');
      4. select subtime(time '02:12:59','10:13:01');
      5. select timediff(time '12:09:11','13:59:30');
      6. select timediff(time '12:09:10',time '12:56:34');
  10. 缺少一些异常时间值的合法性校验,如
  11. select minute('2022-02-03 10:61:03');
  12. time_format返回值不同
  13. select time_format(date '2022-01-22','%H %k %h %I %l');MySQL的%k是0...23, 我们的是00...23
  14. 默认时区不同,导致部分函数返回值不同
  15. SELECT to_seconds('2022-02-02');
  16. select to_seconds('2022-02-02 09:09:00');
  17. select to_seconds(timestamp '2022-02-02 09:09:00');
  18. select to_seconds(time '09:09:00');
  19. bin函数返回值不同
  20. ClickHouse上会比MySQL上多个前缀,如SELECT bin(12);
  21. 部分函数 MySQL 比 ByteHouse 多了一层hex的转化,如
  22. SELECT char(97,110,97,108,121,116,105,99,100,98);
  23. SELECT unhex(hex('China'));
  24. SELECT from_base64('Q2hpbmE=');
  25. Concat 中的参数校验
  26. 其中Space参数为负值时,MySQL没有强校验,ClickHouse会报错
  27. SELECT concat('#', space(-1), '#');
  28. encrypt函数使用diff
  29. ClickHouse只支持三个参数,MySQL 5.6可以支持两个参数
  30. ClickHouse上暂不支持|,需要使用bitOr(a,b)代替
  31. SELECT make_set(bitOr(1,4),'hello','nice',NULL,'world')AS result;
  32. unnest函数不支持

其他注意事项

  1. 使用低于 2.4 版本的 ClickHouse client时,部分MySQL function会报错语法不识别,如select adddate();
  2. 生态兼容问题:通过 Workbench、Navicat 等程序连接 ByteHouse 时可能产生不兼容情况,目前主要存在Unknow function:current_userDatabase doesn't exists:information_schema两种报错,计划会在未来的版本中修复。
最近更新时间:2025.01.21 10:34:38
这个页面对您有帮助吗?
有用
有用
无用
无用