mtmail.jpとは?メールで全てのブログ投稿も実現できるサービスがあるMovable Typeについて簡単ではございますがまとめたサイトでございます。
MySQL(マイエスキューエル)は、オラクルが開発するRDBMS(リレーショナルデータベースを管理、運用するためのシステム)の実装の一つである。
オープンソースで開発されており、GNU GPLと商用ライセンスのデュアルライセンスとなっている。
他の多くのオープンソースプロジェクトと異なり、スウェーデンの単一の営利企業「MySQL AB」によって保持されていた。2008年2月26日にMySQL ABがサン・マイクロシステムズに買収されたことによってサン・マイクロシステムズの所有となった。またトレードマークおよび著作権もサン・マイクロシステムズが所有していた。2010年1月27日、サン・マイクロシステムズはOracleに買収された。
世界でもっとも普及しているオープンソース・データベースとして知られており、市場シェアではPostgreSQLなどの他のオープンソース・データベースを圧倒している[3]。日本でも2009年になってPostgreSQLを超えるシェアを獲得している。[4]、初期のMySQLで文字コードのサポートが悪かったのが影響したが、現在はEUC、SJIS、多言語面を含むUTF-8などをサポートしている。
データの保存とアクセスを行うストレージエンジンがSQLパーサとは分離独立しており、用途に応じたストレージエンジンを選択できる「マルチストレージエンジン」方式を採用している。特に InnoDB ストレージエンジンはトランザクションに対応し、高い堅牢性とMVCCによる高い並列性を兼ね備えており、あらゆるアプリケーションに対応出来る人気のストレージエンジンとなっている。また、InnoDB登場以前から搭載されているMyISAMストレージエンジンも検索が高速であり、更新よりも参照の頻度の高いWebアプリケーションなどで活用されている。全文検索が利用できるのも、MyISAMの利点である。
MySQLでは、トランザクション管理はストレージエンジンの役割であり、トランザクションを利用したければ対応したストレージエンジンを使用すればよい。バージョン3.23.34以降で組み込まれているInnoDBは、オープンソースソフトウェア企業のInnobase社が開発したストレージエンジンであり、ACIDに準拠したトランザクションをサポートしている。InnoDBはメディア障害時の更新ログによるリカバリもサポートしている。
MyISAMでは、トランザクションをサポートしていない。トランザクションが必要でないシーンは徐々に減ってきているので、最近MyISAMの出番も減りつつあるようである。
以前はMyISAMの方が高速であると言われることが多かったが、InnoDBの性能改善が進んだことから、高速性を求めるためにMyISAMを利用するということも減ってきている。
副次問い合わせ(サブクエリ)は、バージョン4.1以降でサポートされている。バージョン5.0以降では、SQL99にストアドプロシージャ、ビュー、トリガーが実装され、機能の面でも他のRDBMSに追いつきつつある。
その他、標準でマスタスレーブ方式のレプリケーション機能を備えており、堅牢なデータストレージの構築が比較的容易である。
MySQLは GPL とコマーシャルライセンスのデュアルライセンス方式で提供されている[6]。
基本的に、MySQLのサーバ本体とクライアントライブラリはGPLで提供される。 このため、MySQLを改造し、それを再頒布する場合は、GPLに従う必要がある。 また、GPLのクライアントライブラリを利用してMySQLに接続するアプリケーションを開発した場合、 そのアプリケーションもGPLライセンスとしなければならない。
ただし、クライアントライブラリに関しては、アプリケーションが既定のオープンソースライセンスで公開されるのであれば、GPL以外のオープンソースライセンスで再頒布することも可能である[7]。
サポート付きの有料パッケージであるMySQL Enterpriseでは、デフォルトでGPL版のバイナリが提供されるが、必要に応じてコマーシャルライセンス版も利用可能となる[8]。 コマーシャルライセンス版では、GPLによる制約は受けない。
MySQL5は、sjis(Shift JIS)、cp932(Microsoftコードページ932)、utf8(UTF-8(3バイトまで))、utf8mb4(UTF-8(4バイトまで。MySQL5.5以降でサポート))、ujis(EUC-JP)といった文字セットを指定することで、日本語の文字を含む入出力を正しく扱うことができる。
sjisは、JIS X 0201およびJIS X 0208に準じたものであるが、同じ「Shift JIS」でも、Windows環境で使用される文字の一部を正しく扱えない場合がある。これは、Windowsでは、前記の規格以外の拡張文字を含む、拡張されたShift JISを使用しているためである。これらの文字をMySQLで正しく扱うには、sjisではなくcp932を指定する。
たとえば、Microsoft AccessからUTF-8で格納するテーブルにODBCリンク経由でアクセスする場合は、MyODBCの文字セット設定をcp932にしておけば、正しく入出力できる。
cp932がMySQLでサポートされたのは4.1.12からであり、それまでは、「sjisで格納し、sjisで入出力」するという設定を行い、入出力時の文字コード変換を避けることで、Windowsの拡張シフトJISで問題が起きないようにする、というのが、日本国内における「常識」であった。 cp932のサポートの前にはすでにUnicodeがサポートされていたが、それらを積極的に使用する人はあまりいなかった。 なぜなら、Unicodeで格納するテーブルに対してsjisで入出力を行うと、Windows環境において拡張文字が適切に変換されず文字化けが発生するため、それが「Unicode対応が不完全」「Unicodeはまだ使いものにならない」という評価を生む一因となっていたからである。
Ruby on Rails、CakePHPのデフォルトはutf8だが、データベース接続設定でencodingをutf8と明示的に使用宣言しておく必要がある。