2013-12-19

常用漢字データベースSQLの使い方

Categories: SQL
20131219131744.jpg

[ PR ]


先日、常用漢字SQLを公開しました。 という記事で、常用漢字データベースSQLを公開しました。

<i class="fa fa-github"></i> [常用漢字データベースSQL](https://gist.github.com/atmarksharp/8033466)

ただ、ダブルポストにならないように、こちらではこのデータベースの使い方を解説します。

配布物

今回配布しているのは、

  • README.md
  • create_jouyou_kanji.sql
  • create_jouyou_kanji_reading.sql

の3種類です。README.mdにはライセンス形態が書いてあります。

create_jouyou_kanji.sql は jouyou_kanjiテーブル、create_jouyou_kanji_reading.sql は jouyou_kanji_readingテーブルを作成します。

SQLの導入

このSQLにはテーブル名は指定してあります。随時変更してもらってかまいません。

ただし、データベースは指定してないので、適宜設定します。

導入の方法は様々だと思いますが、レンタルサーバなどで一般的なのは、phpMyAdminからインポートするという方法です。

この方法は割愛しますので、[http://www.dbonline.jp/mysql/:title] や [http://www.dbonline.jp/phpmyadmin/:title] を参照してください。

使い方

では、インストールが済んだとして、どういう風に使うのかを説明します。

常用漢字テーブル (jouyou_kanji)

まず、jouyou_kanjiテーブルのみを使ってみます。

SELECT
    IF(count(*) > 0, 'true', 'false') as exists
FROM
    jouyou_kanji
WHERE
    kanji = '赤'; /* あまり良くない */

これが基本的な使い方ですが、kanjiカラムにはインデックスが付与されていないので、utf(UTF-16)を使うのがおすすめです。

SELECT
    IF(count(*) > 0, 'true', 'false') as exists
FROM
    jouyou_kanji
WHERE
    utf = '8d64'; /* インデックスが効くので良い */

漢字からUTF-16に変換する方法は言語によって違いますが、Rubyでは次のようになります。

def utf16_encode(s) # '赤' => '8d64'
    s.unpack("U*")[0].to_s(16)
end

def utf16_decode(s) # '8d64' => '赤'
    [s.hex].pack("U*")
end

PHPではこうです。

<?php
function utf16_encode($s) { // '赤' => '8d64'
    unpack('H*',mb_convert_encoding($s,'UTF16','UTF8'));
}

function utf16_decode($s) { // '8d64' => '赤'
    mb_convert_encoding(pack('H*',$s),'UTF8','UTF16');
}
?>

UTF-16に限ったことではないですが、文字コードの変換はトラブルが起こりやすいので注意して下さい。

常用漢字読み方・熟語テーブル (jouyou_kanji_reading)

次はjouyou_kanji_readingテーブルです。

このテーブルの使い方は次の通りです。

SELECT
    id, utf, reading, example, type
FROM
    jouyou_kanji_reading
WHERE
    utf = '8d64';

これだけです。わざわざカラムを明記しましたが、注意として以下の2点があります。

  • 結果は複数帰ってくる場合がある
  • typeは訓読みか音読みかをを示す (0 or 1)

何故かと言うと、訓読みと音読みが別々のレコードになっており、さらに訓読みが複数ある場合があるからです。

これを押さえておけば、あとは jouyou_kanji テーブルと組み合わせれば完璧です。

SELECT
    j.kanji, j.utf, jr.reading, jr.example, jr.type
FROM
    jouyou_kanji j, jouyou_kanji_reading jr
WHERE
    1 /* インデントを揃えるため */
    AND j.utf = '8d64'
    AND j.utf = jr.utf;

これで実用的なSQLになりました。あとは適宜自由に使って下さい。

まとめ

今回は常用漢字データベースSQLの使い方を解説しました。

常用漢字は年々改定されるので、データベースを更新するのがちょっと面倒ですね。

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
ミック
翔泳社
売り上げランキング: 4,133

コメントはTwitterアカウントにお願いします。

RECENT POSTS


[ PR ]

.