MySQL VS. MariaDB 之日期格式差异

MariaDB Foundation 号称 MariaDB 是 MySQL 的替代品, 但我发现它们之间还是有些不兼容的地方(而且不在已列出的清单里). MariaDB 似乎对日期格式要求更为严格. 以下 SQL 的执行结果就很有不同, 在 MySQL 中 changed_at 是正常的 datetime, 但是在 MariaDB 中 changed_at 完全是 ‘0000-00-00 00:00:00’ 的样子.

INSERT INTO ...
 SELECT ...
  GREATEST( COALESCE(`inspection`.`ts`, 0), COALESCE(`inspection_details`.`ts`, 0), COALESCE(`open_time_reason`.`ts`, 0)
 ) AS `changed_at`
 ON DUPLICATE KEY UPDATE ...
 `changed_at` = VALUES(`changed_at`)

解决方法是添加一个明确的格式转换: CONVERT(… , DATETIME)

CONVERT(
 GREATEST( COALESCE(`inspection`.`ts`, 0), COALESCE(`inspection_details`.`ts`, 0), COALESCE(`open_time_reason`.`ts`, 0)
 ), datetime
 ) AS `changed_at`

我已经将此 bug 提交: https://mariadb.atlassian.net/browse/MDEV-8630

🙂

关于 mysql2 gem 和 MariaDB

MariaDB 可以被看作是 MySQL 的增强版, 在绝大多数情况下用 MariaDB 替代 MySQL 都能取得不错的效果. 只是一些接口程序依旧把 MariaDB 当作 MySQL (这也没什么错吧), 例如安装 mysql2 gem 的时候, 我不得不如此才能把这个 gem 正常安装:

sudo apt-get install libmariadb-client-lgpl-dev libmariadb-client-lgpl-dev-compat
gem install mysql2 -v '0.3.14' -- --with-mysql-include=/usr/include/mariadb/

🙂

用 MariaDB 替换 MySQL

ice_logo-5dcea9e47b780ff52f75c3c3304d54827f56211e

自从 MySQL 被邪恶的 Oracle 收购后, 貌似就到了后娘手里, 基本没什么发展. 不过还好, 原创班子已另起炉灶, 在 MySQL 5.5 的基础上做出很多改良, 发布了 MariaDB 5.5. 另外一个好消息就是终于看到了国人在开源圈子里的贡献: MariaDB 10.x 分支就包含了来自淘宝的两处贡献:

https://mariadb.com/kb/en/what-is-mariadb-100/ <–在这页上找 taobao 即可.

希望这样的案例越来越多吧. 免费使用开源软件, 在事业成功之后回馈开源社区, 这是个良性循环.

目前我试用了 MariaDB 5.5, 是 MySQL 5.5 的完美替代品. 安装方法在此:

https://downloads.mariadb.org/mariadb/repositories/#mirror=aarnet_pty_ltd&distro=Debian&distro_release=squeeze&version=5.5

另外如果用 Ruby 的 mysql2 gem 的话, 需要安装 libmariadbclient-dev(debian/ubuntu). 而如果 innotop 这个小工具不灵的话, 很可能需要安装 libterm-readkey-perl.

🙂