PostgreSQL慣れしていると「あっ」となるMySQLの仕様


はじめに

エンジニアの高橋です。
この頃はプロジェクトのマネジメント業務も進めつつ、
自らの技術力を向上する時間の捻出に必死です。

どのような開発をするか指示をするときに「このsql文の結果となる内容を出して下さい」という言い方をすることがありますが、その際に発見したことがあります。

PostgreSQLとMySQLの違いです。

リンクバルに入社するまではPostgreSQLを使用してきました私です。
MySQLに挑戦してみて、思った以上に同じ文で通じるということがわかりましたが、
時々違いを発見し、あっ!そうなのか!となることがあります。

「PostgreSQL MySQL 違い」で検索すると
・ライセンスの違い
・追記型/更新型
などの記述はよく出てきますが、
使う関数の違いなど初歩的な違いはすぐには出てこない印象です。

そこで今回はそういった違いについて私が発見したものをまとめてみました。

1.date_truncが使えない

select * from テーブル名 where date_trunc('day',登録日時) >= "2017-01-01";

↑これはエラーになります。

select * from テーブル名 where DATE_FORMAT(登録日時,'%Y-%m-%d') >= "2017-01-01";

↑こう書きます。

2.TEXT型が文字数有限

どのくらい文字が入るかわからない/大量の文字が入るカラムについては
TEXT型!と思っていた私でした。

ところが、MySQLのTEXT型は無限ではありませんでした。
レファレンスマニュアルによると最大長は 65,535文字です。
マルチバイト文字を使用する場合、さらに入力数は制限されます。

65,535文字よりも多い文字数を格納したい場合は
・MEDIUMTEXT
・LONGTEXT
を、格納したい文字数の最大値に合わせて選択する必要があります。

3.booleanではなくtinyint(1)

「フラグ」といえばboolean!ですが、MySQLではtinyint(1)を使用します。
レファレンスマニュアルでは「booleanはTINYINT(1) のシノニム」とあります。

本ブログでは割愛しますが、「boolean tinyint」で検索すると様々な興味深い記述が出てきます。

まとめ

それぞれのデータベース言語は全体的に見ると同じように見えますが、違いも多くあります。
この言語でこういう書き方だからあの言語でもそうだろうと決めつけず、特徴を正しく理解して活用したいところですね。

さいごに

リンクバルはデータベース好きなエンジニアを募集しています。
応募はコチラからお願いします。