Open Source WEB

文字列操作関数は色々あるのだが、今回は REPLACE()を考えてみよう。 例によって、マニュアルのREPLACE()の説明を挙げておく。

12.3. String Functions

REPLACE(str,from_str,to_str)

Returns the string str with all occurrences of the string from_str
replaced by the string to_str. REPLACE() performs a case-sensitive 
match when searching for from_str.

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
        -> 'WwWwWw.mysql.com'

This function is multi-byte safe. 

REPLACE(str,from_str,to_str)は3つの文字列引数をとるのだが、 どういう動きになるかは、実際の例で示した方が分かりやすいだろう。

mysql> SELECT REPLACE('東京なんとか大学','なんとか','女子医科');
+---------------------------------------------------+
| REPLACE('東京なんとか大学','なんとか','女子医科') |
+---------------------------------------------------+
| 東京女子医科大学                                  |
+---------------------------------------------------+
1 row in set (0.00 sec)
 
mysql>

今は、 SET NAMES eucjpms の状態になっているので、 与えた文字列のキャラクタセットは全部 eucjpms になり、 結果も

mysql> SELECT CHARSET(REPLACE('東京なんとか大学','なんとか','女子医科'));
+------------------------------------------------------------+
| CHARSET(REPLACE('東京なんとか大学','なんとか','女子医科')) |
+------------------------------------------------------------+
| eucjpms                                                    |
+------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql>

と、めでたく eucjpms になっている。


binary を含んでいた場合

さて、1つでもbinaryになっていたら、結果はどうなるのであろうか。

まず、eucjpms と binary が混じっていた場合を試してみる。

mysql> SELECT REPLACE(_binary'東京なんとか大学','なんとか','女子医科');
+----------------------------------------------------------+
| REPLACE(_binary'東京なんとか大学','なんとか','女子医科') |
+----------------------------------------------------------+
| 東京女子医科大学                                         |
+----------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql> SELECT CHARSET(REPLACE(_binary'東京なんとか大学','なんとか','女子医科'));
  
+-------------------------------------------------------------------+
| CHARSET(REPLACE(_binary'東京なんとか大学','なんとか','女子医科')) |
+-------------------------------------------------------------------+
| binary                                                            |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql> SELECT REPLACE('東京なんとか大学',_binary'なんとか','女子医科');
+----------------------------------------------------------+
| REPLACE('東京なんとか大学',_binary'なんとか','女子医科') |
+----------------------------------------------------------+
| 東京女子医科大学                                         |
+----------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql> SELECT CHARSET(REPLACE('東京なんとか大学',_binary'なんとか','女子医科'));
+-------------------------------------------------------------------+
| CHARSET(REPLACE('東京なんとか大学',_binary'なんとか','女子医科')) |
+-------------------------------------------------------------------+
| binary                                                            |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql> SELECT REPLACE('東京なんとか大学','なんとか',_binary'女子医科');
+----------------------------------------------------------+
| REPLACE('東京なんとか大学','なんとか',_binary'女子医科') |
+----------------------------------------------------------+
| 東京女子医科大学                                         |
+----------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql> SELECT CHARSET(REPLACE('東京なんとか大学','なんとか',_binary'女子医科'));
+-------------------------------------------------------------------+
| CHARSET(REPLACE('東京なんとか大学','なんとか',_binary'女子医科')) |
+-------------------------------------------------------------------+
| binary                                                            |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql>

要するに、1つでもbinaryになっていたら、最終的な結果もbinaryになるようだ。

次に、cp932 や utf8 と binary が混じっていた場合はまだ試していないが、

REPLACE()の3つのパラメータ文字列の1つでもbinary文字列だったら、 結果はbinaryになる

と考えられそうだ。マニュアルには何の説明もなかったが、たぶんそうだろう。 そして、これは、CONCAT()のときと同じ方針と考えてよいだろう。


戻る:latin1キャラクタセット文字列とのCONCATは

次へ:キャラクタセットがbinaryの文字列のREPLACEは


フィードバック:

Name:
Comment:

There is no comment.

このサイトは、 IPA の「平成15年度オープンソフトウエア活用基盤整備事業」 の委託事業として開発されたKahuaで試験的に運用しております。

Copyright (c) 2004-2007 株式会社タイムインターメディア About Us