Hello.
This is still a bug. See: http://bugs.mysql.com/bug.php?id=16330 Hirofumi Fujiwara wrote: > Hi, > > >>Hello. >> >>This should be fixed in 5.0.18. See: >> http://bugs.mysql.com/bug.php?id=13909 > > > 17.2.1. CREATE PROCEDURE and CREATE FUNCTION > http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html > > says ... > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > 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. > > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > > I thought that this explanation means function controls CHARACTER SET > clause properly from 5.0.18. > > So, I checked on version 5.0.18, but situation is same.... > > > mysql> SELECT VERSION(); > +---------------------+ > | VERSION() | > +---------------------+ > | 5.0.18-standard-log | > +---------------------+ > 1 row in set (0.01 sec) > > mysql> SET NAMES utf8; > Query OK, 0 rows affected (0.00 sec) > > ## I tried to make function tokyo() which returns string 'Tokyo' in > ## Japanase. _utf8 X'E69DB1E4BAAC' means Tokyo in Japanese. > > mysql> DELIMITER // > mysql> CREATE FUNCTION tokyo() RETURNS VARCHAR(20) CHARACTER SET utf8 > -> DETERMINISTIC RETURN _utf8 X'E69DB1E4BAAC'; > -> // > Query OK, 0 rows affected (0.00 sec) > > mysql> DELIMITER ; > mysql> SELECT tokyo(); > +---------+ > | tokyo() | > +---------+ > | ?? | > +---------+ > 1 row in set, 1 warning (0.00 sec) > > mysql> SELECT HEX(tokyo()); > +--------------+ > | HEX(tokyo()) | > +--------------+ > | 3F3F | > +--------------+ > 1 row in set, 1 warning (0.00 sec) > > mysql> SELECT CHARSET(tokyo()); > +------------------+ > | CHARSET(tokyo()) | > +------------------+ > | binary | > +------------------+ > 1 row in set (0.00 sec) > > mysql> SHOW CREATE FUNCTION tokyo\G > *************************** 1. row *************************** > Function: tokyo > sql_mode: > Create Function: CREATE FUNCTION `tokyo`() RETURNS varchar(20) > DETERMINISTIC > RETURN _utf8 X'E69DB1E4BAAC' > 1 row in set (0.00 sec) > > mysql> > > > Returned charater type of function is binary. > > And, SHOW CREATE FUNCTION removed "CHARACTER SET utf8" part. Why? > > ------------------------------------------------------------ > Hirofumi Fujiwara [EMAIL PROTECTED], [EMAIL PROTECTED] > Time Intermedia Corporation http://www.timedia.co.jp/ > Corporate Strategy Department & Knowledge Engineering Center > 26-27 Saka-machi Shinjuku-ku, Tokyo 160-0002 Japan > ------------------------------------------------------------ > -- For technical support contracts, goto https://order.mysql.com/?ref=ensita This email is sponsored by Ensita.NET http://www.ensita.net/ __ ___ ___ ____ __ / |/ /_ __/ __/ __ \/ / Gleb Paharenko / /|_/ / // /\ \/ /_/ / /__ [EMAIL PROTECTED] /_/ /_/\_, /___/\___\_\___/ MySQL AB / Ensita.NET <___/ www.mysql.com -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]