Codeリーダブルコード開発補助php-cs-fixerKenny2023.10.27データベースの文字コード、何にしていますか?DatabaseMySQLSQLはじめまして開発みなさん、はじめまして。弊社のプロダクト「Letro」の開発チームのプロジェクトマネージャーを担当しています。私は子供の頃から「コード」(code)オタクです。郵便番号や電話番号、商品のバーコードの下に表示されているJANコード、などなど、数字やアルファベットの羅列を見ているだけで何かゾクゾクしてしまいます(笑)。その中でも特に大好きなのが「文字コード」です。文字コードとは文字コードとは、文字や記号を通信やコンピューターで取り扱う為に、各文字や記号に対して通し番号を付与したものです。Interchange)という文字コードで表すと以下のようになります。0x41ASCIIはアメリカで制定された文字コードなので、漢字やカナ、ハングル、アラビア文字などのアルファベット以外の文字に対するコードは用意されてません。そこで、ASCIIを拡張した形で世界中で様々な文字コードが誕生しました。日本でも以下のような文字コードが開発されました。米アップル社がShift_JISを独自に拡張した文字コードしかし、文字コード同士の互換性に問題があり、文字コードの自動判定がうまくいかずに、いわゆる「文字化け」という現象も日常的に発生していました。0xC6FD)などの一見、無意味な漢字がコメントとして挿入されていました。これらの漢字は、Shift_JIS以外の文字コードでは登場しないコードパターンである為、文字化けを発生させにくい文字として広く知られていました。「雀の往来」なんていう洒落たフレーズを文字化け防止に採用していた例もありました。日本国内だけでもこんな状況であったので、インターネットが普及し始めて世界中のコンピューター同士がデータやメッセージのやり取りを行うのに当たり、非常に大きな障壁となっていました。10646)を制定する作業が始まりました。この取り組みは「漢字のコード統一化」を目指していた中国の反対もあって、残念ながら頓挫してしまいます。Collinsは、1987年頃から世界中の文字を一つの文字コードで扱う新しい文字コードの開発をしていました。これが「ユニコード」(Unicode)です。このプロジェクトには、ゼロックス以外にも多くの企業が賛同し、1990年に「ユニコードコンソーシアム」が誕生しました。ユニコードコンソーシアムには、日本からもジャストシステムが参加し、ユニコードに日本の膨大な文字を組み込む途方もない作業が始まりました。この作業には、様々な紆余曲折があったのですが、残念ながらここでは割愛させていただきます。興味のある方は、以下の書籍を是非、お読みになってください。)UTF-8ユニコードには、以下の3つの文字コードが存在します。UTF-8UTF-16UTF-32UTF-の後に続く数字は、コード単位のビット数です。1つの文字を表現するのに、複数のコードを組み合わせる場合もあります。この中で、現在、最も多く利用されているのは「UTF-8」です。UTF-8の概要は以下の通りとなります。1から4バイトの可変長のコードで管理する。ASCIIコードと同じ文字(1バイト)は共通の文字コードで表現可能。漢字やカナなどを表現しようとすると3バイトが必要となる。ユニコード以前の文字コードでは2バイトで表現できた。皆さんが普段目にされているWebページやメールなどのメッセージは、ほぼ全てがUTF-8で記述されています。皆さんが今、ご覧になっているこのページもUTF-8です。データベースの文字コード最近のシステム(特にインターネットと繋がっているもの)であれば、データベースの文字コードはUTF-8で設定されていると思います。UTF-8には実はいくつかの種類があり、その違いを分からずに設定してしまうと不具合の原因になる場合があります。ここからは、MySQLを例に説明していきます。MySQLで設定が可能なUTF-8コードにもいくつか種類がありますが、日本語を保存する際に使われることが多いのは次の2つです。「utf8」は、実は「utf8mb3」のエイリアス(別名)になっていて、1~3バイトで定義された文字しか扱うことができません。「utf8mb4」であれば、4バイトで定義された文字も扱うことができます。