MySQLの文字コード関連の設定を調べる方法

Updated:

前のエントリに引き続きMySQLについての話です。今回は、文字コードの設定を確認するためのコマンドを紹介します。

文字コード関係の設定を表示する

次のコマンドを実行すると、文字コードに関する設定が表示されます。

mysql> show variables like 'character_set%';

前回のエントリで書いたように、Ubuntuでは特に何もしないと、MySQLのデフォルトの文字コードはlatin1になっています。ですから、次のように表示されます。

mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

前のエントリで説明したように、my.cnfにcharacter_set_server = utf8という設定をしておくと、次のように文字コードがutf8となります。(character_set_filesystemはファイルシステムの文字コードで、binaryで構いません。)

mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

このような設定になっていれば、文字コードを指定しないでcreate databaseやcreate tableを実行した時に、データベースやテーブルの文字コードがutf8になります。

データベースの文字コード設定を表示する

特定のデータベースの文字コード設定を知るには、次のコマンドを実行します。

mysql> show create database データベース名;

次の例は、mydbデータベースの文字コードを表示しています。「DEFAULT CHARACTER SET utf8」となっているので、文字コードがutf8に設定されていることがわかります。

mysql> show create database mydb;
+----------+---------------------------------------------------------------+
| Database | Create Database                                               |
+----------+---------------------------------------------------------------+
| mydb     | CREATE DATABASE `mydb` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)

テーブルの文字コード設定を表示する

特定のテーブルの文字コード設定を知るには、次のコマンドを実行します。

mysql> show create table テーブル名;

次の例は、mydbデータベースのusersテーブルの文字コードを表示しています。11行目の「DEFAULT CHARSET=utf8」から、文字コードがutf8に設定されていることがわかります。

mysql> show create table mydb.users \G
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

UbuntuでMySQLを使う際の文字コードの設定

Updated:

Ubuntu (12.04LTS)でMySQLを使う際に必要な設定についてまとめてみました。

このように、最初に1回だけ行なう設定や手順は、次に必要になった時には忘れていて、改めて調べ直すことが多いものです。

MySQLをインストールする

mysql-serverパッケージをインストールすれば、最新版のMySQL一式がインストールされます。(2013/1時点では、MySQL 5.5系です。)

$ sudo apt-get install mysql-server

MySQLの起動と停止

起動や停止といったいわゆる運用系の操作は、Ubuntuの標準的なやり方で行ないます。

# MySQLを起動する
$ sudo /etc/init.d/mysql start
 
# MySQLを停止する
$ sudo /etc/init.d/mysql stop
 
# MySQLを再起動する
$ sudo /etc/init.d/mysql restart
 
# MySQLの現在の状態を表示する
$ sudo /etc/init.d/mysql status

utf8を使うように設定する

Ubuntuでは、MySQLの設定ファイルmy.cnfは、/etc/mysql/my.cnfに置かれています。

Ubuntuでは、デフォルトではサーバの文字コードは(utf8ではなく)latin1になります。そのために、文字コードを指定せずにデータベースやテーブルを作成すると、文字コードがlatin1となり日本語(utf8)が文字化けしてしまいます。

日本語のデータを扱うならば、デフォルトの文字コードをutf8としておくとよいでしょう。それには、my.cnfに次の設定を追加します。

[mysqld]
character_set_server = utf8

新年のご挨拶

Updated:

明けましておめでとうございます。本年もよろしくお願いいたします。

昨年は,久しぶりに,個人的な活動を再開した年でした。

7月には,初版から長年にわたり翻訳を担当させていただいている『初めてのPerl』の第6版が出版されました。(初版の日本語版の出版は1995年6月なので,17年も昔のこととなります。)

9月にはYAPC::Asia 2012に参加して,「Perlの勘所をマスターしよう! コンテキストとリファレンスを我が物に!」と題して話させていただきました(スライド動画)。YAPC::Asiaでは,Perlの産みの親であるLarry Wallさんと,久しぶりにお会いして話すことができました。

また,しばらく更新が滞っていたこのブログの更新も,(かなり不定期ではあるものの)再開しました。

個人サイトwww.kondoyoshiyuki.comも,Bootstrap.jsを使って,今風に(?)リニューアルしました。更新しやすいようにちょっとした仕組みを作ってみました。コンテンツはMarkDownで記述して,Gitで管理しており,git push webを実行すると,自動的にサイトに反映させるようにしています。しかし,仕組みを作ったことで満足してしまい,ほとんど更新していなかったりします。(ありがちな話ですけど。)

今年は,昨年以上に,できるだけ頻繁にブログを更新していこうと思います。また,サイトwww.kondoyoshiyuki.comのほうも,コツコツと内容を充実させていきますので,ご期待ください。

また,いろいろと新たに習得したい事も多いので,今年は,積極的に勉強会やセミナーに参加しようと思います。勉強会などで見かけたら,気軽に声をおかけください。

技術書も,読もうと思って購入したものの,積ん読状態になっているものが多いので,頑張って読んでいこうと思います。

以上,つらつらとまとまりの無い事を書いてしまいましたが,今年もよろしくお願いいたします。

YouTubeは動画の関連付けに機械翻訳を使っているらしい

Updated:

YouTubeでヘンデルのシャコンヌのすごい演奏を見つけました。Michael Borgstedeによるハープシコードの演奏で,冒頭で呈示されるテーマが豪華絢爛に装飾されていて非常に華麗な演奏です。

Chaconne in G major HWV 435 - Georg Friedrich Händel

関連動画に

Полина Осетинская играет Чакону Генделя

というのが表示されていました。何だろうと思って,クリックすると,これもヘンデルのシャコンヌでした。こちらは,ピアノですが,これもなかなか良い演奏です。

「Полина Осетинская играет Чакону Генделя」はロシア語っぽいので,Google翻訳でロシア語から英語に変換すると"Pauline Ossetian plays Handel Chaconne"でした。

YouTubeって,機械翻訳を利用して,動画を関連付けてるんですね。まあ,Google翻訳があるんだから,そのくらい当然なんでしょうけど,ちょっと意表を突かれました。

jQueryのセレクタの指定法

Updated:

ここのところ、JavaScriptとjQueryを勉強しています。

jQueryの基本であるセレクタの書き方についてのメモです。

基本的な指定法

$("div")

要素divすべてを選択

$(".main")

クラスmainの要素すべてを選択

$("#foo")

id="foo"の要素を選択

組み合わせた指定法

ちょっとまぎらわしいので要注意です。

$("div a")

div要素の下に存在するa要素すべてを選択
(aはdivの子孫であればよい。子でも孫でもOK。)

$("div > a")

div要素の直下に存在するa要素すべてを選択。
(aはdivの子でなければならない。孫はダメ。)

$("div,li,a")

div要素すべてとli要素すべてとa要素すべてを選択。
(いわゆるorだと考えればよいでしょう。)

$("label + input")

label要素の直後にあるinput要素を選択。
(間にほかのものがあるとダメ)

$("#prev ~ div")

id="prev"の要素の後ろ(同レベル)にあるdiv要素すべてを選択。
英語ではNext Sibling Selectorという。Sibling(兄弟)は、同じレベルで並んでいる要素のこと。

次の例のようになる:

<body>
  <div>選択されない(divだが#prevの前にあるため)</div>
  <span id="prev">ここが基準(選択されない)</span>
  <div>選択される</div>
  <div>選択される
    <div>選択されない(兄弟でないので)</div>
  </div>
  <span>選択されない(divでないので)</span>
  <div>選択される</div>
</body>

$("div a")と$("div > a")の違いに注意

前者$("div a")は、div要素の「子孫」であるa要素すべてを選択。a要素は、divの子でも、孫でも、ひ孫でもOK。

後者$("div > a")は、div要素の「子」であるa要素すべてを選択。こちらは、aはdivの直接の子でなければなりません。孫やひ孫は選択されません。