Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
与えられた文字列と異なるキャラクタセットをintroducerで指定
SET NAMES UJISにてキャラクタセットがujisで、 キャラクタ端末も ujis になっているとしよう。
ここで、
mysql> SELECT '漢字表示'; +----------+ | 漢字表示 | +----------+ | 漢字表示 | +----------+ 1 row in set (0.00 sec)
となるのは当然である。
マニュアルを見ると、普通の文字列の直前にも introducer を置くことができるとある。 まずは安全と思われる _ujis を付加してみよう。
mysql> SELECT _ujis '漢字表示'; +----------+ | 漢字表示 | +----------+ | 漢字表示 | +----------+ 1 row in set (0.01 sec)
予想通り、余計な影響は出ないようだ。 ここでは、'漢字表示' は元々 ujisの文字列なので、それに _ujis をつけても 同じキャラクタセットなので影響がない。
では、ujisの文字列の前に、_sjisを付加するとどうなるであろうか。
mysql> SELECT _sjis '漢字表示'; +-----------------+ | エチサ?ノスシィ | +-----------------+ | エチサ?ノスシィ | +-----------------+ 1 row in set (0.00 sec)
'漢字表示'というujisの文字列を無理矢理sjisの文字列として解釈させたため、 変なことになったのではないかと思う。
introducer でバイト列の中味はどうなったか
文字列(バイト列)の中味がどうなったかは、HEX()関数を使えばすぐ分る。
mysql> SELECT HEX('漢字表示');
+------------------+
| HEX('漢字表示') |
+------------------+
| B4C1BBFAC9BDBCA8 |
+------------------+
1 row in set (0.00 sec)
mysql> SELECT HEX(_sjis '漢字表示');
+-----------------------+
| HEX(_sjis '漢字表示') |
+-----------------------+
| B4C1BBFAC9BDBCA8 |
+-----------------------+
1 row in set (0.00 sec)
ということで、_sjisというのを付加しても、16進数表示させると、 中味はujisのままであることが分る。
introducerはバイト列の内容は変えない。
文字列(バイト列)のキャラクタセットを変更する。
_binaryというintroducer
今までは、_ujis, _sjis, _utf8 などなんらかのキャラクタセットに するような使い方を説明してきたが、どのキャラクタセットでもなく、 単なるバイト列として解釈させるためにbinaryというのがキャラクタセット に含まれており、_binaryというintroducerもある。
mysql> SET NAMES UJIS; Query OK, 0 rows affected (0.00 sec) mysql> SELECT 0xB4C1BBFAC9BDBCA8; +--------------------+ | 0xB4C1BBFAC9BDBCA8 | +--------------------+ | 漢字表示 | +--------------------+ 1 row in set (0.00 sec) mysql> SELECT _binary 0xB4C1BBFAC9BDBCA8; +----------+ | | +----------+ | 漢字表示 | +----------+ 1 row in set (0.00 sec) mysql> SELECT _binary '漢字表示'; +----------+ | | +----------+ | 漢字表示 | +----------+ 1 row in set (0.00 sec)
_binary は、0xB4C1BBFAC9BDBCA8 の前でも、'漢字表示' の前でも同じになっている。 実際には、binaryからujisに変換され、ちゃんと結果が漢字で表示されているのだが、 binaryからujisへの変換では、中味は何も変らないし、 元々ujisの値になっていたので正しく表示された訳だ。
しかし、値は正しく表示されるものの、タイトルは空白になってしまった。 何か悪いことをしてしまったようなので、今日はここで終ろう。
戻る:バイト列のキャラクタセット指定をするintroducer
フィードバック:
There is no comment.