[前][次][番号順一覧][スレッド一覧]

mysql:12617

From: Hirofumi Fujiwara <Hirofumi Fujiwara <fuji@xxxxxxxxxx>>
Date: Wed, 04 Jan 2006 16:05:59 +0900 (JST)
Subject: [mysql 12617] Re: FUNCTIONの返す文字列型

藤原です

5.0.16 を使っているときに、FUNCTIONの返す文字列型 がどうもうまく動いて
いないことを書きました。

今日、
17.2.1. CREATE PROCEDURE and CREATE FUNCTION
http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

を見てみたら、

 As of MySQL 5.0.18, the server uses the data type of a routine
 parameter or function return value as follows. These rules also apply
 to local routine variables created with the DECLARE statement
 (Section 17.2.9.1, “DECLARE Local Variables”).

    *

      Assignments are checked for data type mismatches and
      overflow. Conversion and overflow problems result in warnings,
      or errors in strict mode.
    *

      For character data types, if there is a CHARACTER SET clause in
      the declaration, the specified character set and its default
      collation are used. If there is no such clause, the database
      character set and collation are used. (These are given by the
      values of the character_set_database and collation_database
      system variables.)
    *

      Only scalar values can be assigned to parameters or
      variables. For example, a statement such as SET x = (SELECT 1,
      2) is invalid.

Before MySQL 5.0.18, parameters, return values, and local variables
are treated as items in expressions, and are subject to automatic
(silent) conversion and truncation. Stored functions ignore the
sql_mode setting. 

という記述がいつの間にか挿入されていました。
もしかすると、 5.0.18(日本時間12/31リリース)で対応したってことですかね。

早速、5.0.18 をダウンロードして再確認するしかないみたいですね。
もう誰か確認された方いらっしゃいますか?

> 藤原です
> 
>   MySQL5.0.16 を使用しておりますが、FUNCTIONで日本語の文字列を返そうと
>   思っているのですが、CHARACTER SET の指定が有効になりません。
> 
> 
> 文字列 'こんにちは' を返す関数作ったら、以下のように動いたのですが、
> CHARSETで文字列のCHARSETを調べたら、binaryでした。
> 
> mysql> CREATE FUNCTION hello () RETURNS CHAR(50)
>     -> RETURN 'こんにちは';
> Query OK, 0 rows affected (0.02 sec)
>  
> mysql> SELECT hello();
> +------------+
> | hello()    |
> +------------+
> | こんにちは |
> +------------+
> 1 row in set (0.00 sec)
>  
> mysql> SELECT CHARSET(hello());
> +------------------+
> | CHARSET(hello()) |
> +------------------+
> | binary           |
> +------------------+
> 1 row in set (0.00 sec)
>  
> mysql>
> 
> mysql> CREATE FUNCTION hello () RETURNS CHAR(50) CHARACTER SET eucjpms
>     -> RETURN 'こんにちは';
> Query OK, 0 rows affected (0.00 sec)
>  
> mysql> SELECT CHARSET(hello());
> +------------------+
> | CHARSET(hello()) |
> +------------------+
> | binary           |
> +------------------+
> 1 row in set (0.01 sec)
>  
> mysql>
> 
> ということで、eucjpmsの指定はエラーにならず受け付けられるのですが、
> 呼び出してキャラクタセットを見ると、やはり binary になってしまいます。
> 
> ちゃんとしたキャラクタセットを指定する方法はあるのでしょうか?
> 
------------------------------------------------------------------
株式会社 タイムインターメディア       藤原 博文 fuji@xxxxxxxxxx
本社 160-0002 東京都新宿区坂町26-27 IPBビル    TEL 03-5362-9009
URL  http://www.timedia.co.jp/                    FAX 03-5362-9008
地図 http://www.timedia.co.jp/company/map/     新宿線曙橋駅徒歩5分
------------------------------------------------------------------
オープンソースWEB   http://oss.timedia.co.jp/   「MySQL日本語の旅」
------------------------------------------------------------------

[前][次][番号順一覧][スレッド一覧]

     12593 2005-12-18 21:10 [Hirofumi Fujiwara <f] FUNCTIONの返す文字列型                  
->   12617 2006-01-04 16:05 ┗[Hirofumi Fujiwara <f]                                       
     12618 2006-01-04 18:50  ┗[Hirofumi Fujiwara <f]                                     
     12629 2006-01-10 22:03   ┗[Hirofumi Fujiwara <f]