Bug #11669 mysql.proc.db and others w charset latin1, when utf8 used server crashes on DROP
Submitted: 30 Jun 2005 14:07 Modified: 8 Jul 2005 13:42
Reporter: Andrey Hristov Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Server Severity:S1 (Critical)
Version: OS:
Assigned to: Bugs System CPU Architecture:Any

[30 Jun 2005 14:07] Andrey Hristov
Description:
mysql.proc.db has character set latin1, which means that if the originating database has a name which is unicode, then mangled data is stored into mysql.proc
Other problematic fields:
- name
- definer
- comment

How to repeat:
set names utf8;

create procedure тестова_процедура() no sql begin end; 

select * from mysql.proc order by created desc limit 1\G

Suggested fix:
change the character set to UTF8 in the script that installs the system tables and also in the migration script.
[7 Jul 2005 19:14] Andrey Hristov
OK, I have changed my proc table to be with UTF8 fields. Now, I am able to create a stored procedure which has non-latin1 name and can see it created but when I try to drop it the server crashes.
The proc table is :

 CREATE TABLE proc (
   db                char(64) character set utf8 binary DEFAULT '' NOT NULL, 
   name              char(64) character set utf8 binary DEFAULT '' NOT NULL, 
   type              enum('FUNCTION','PROCEDURE') NOT NULL, 
   specific_name     char(64) character set utf8 binary DEFAULT '' NOT NULL, 
   language          enum('SQL') DEFAULT 'SQL' NOT NULL, 
   sql_data_access   enum('CONTAINS_SQL', 
                          'NO_SQL', 
                          'READS_SQL_DATA', 
                          'MODIFIES_SQL_DATA' 
                     ) DEFAULT 'CONTAINS_SQL' NOT NULL, 
   is_deterministic  enum('YES','NO') DEFAULT 'NO' NOT NULL, 
   security_type     enum('INVOKER','DEFINER') DEFAULT 'DEFINER' NOT NULL, 
   param_list        blob DEFAULT '' NOT NULL, 
   returns           char(64) DEFAULT '' NOT NULL, 
   body              blob DEFAULT '' NOT NULL, 
   definer           char(77) character set utf8 binary DEFAULT '' NOT NULL, 
   created           timestamp, 
   modified          timestamp, 
   sql_mode          set( 
                         'REAL_AS_FLOAT', 
                         'PIPES_AS_CONCAT', 
                         'ANSI_QUOTES', 
                         'IGNORE_SPACE', 
                         'NOT_USED', 
                         'ONLY_FULL_GROUP_BY', 
                         'NO_UNSIGNED_SUBTRACTION', 
                         'NO_DIR_IN_CREATE', 
                         'POSTGRESQL', 
                         'ORACLE', 
                         'MSSQL', 
                         'DB2', 
                         'MAXDB', 
                         'NO_KEY_OPTIONS', 
                         'NO_TABLE_OPTIONS', 
                         'NO_FIELD_OPTIONS', 
                         'MYSQL323', 
                         'MYSQL40', 
                         'ANSI', 
                         'NO_AUTO_VALUE_ON_ZERO', 
                         'NO_BACKSLASH_ESCAPES', 
                         'STRICT_TRANS_TABLES', 
                         'STRICT_ALL_TABLES', 
                         'NO_ZERO_IN_DATE', 
                         'NO_ZERO_DATE', 
                         'INVALID_DATES', 
                         'ERROR_FOR_DIVISION_BY_ZERO', 
                         'TRADITIONAL', 
                         'NO_AUTO_CREATE_USER', 
                         'HIGH_NOT_PRECEDENCE' 
                     ) DEFAULT 0 NOT NULL, 
   comment           char(64) character set utf8 binary DEFAULT '' NOT NULL, 
   PRIMARY KEY (db,name,type) 
 ) comment='Stored Procedures'; 

The the session:
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> create procedure процедура1()no sql begin end;mes utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from proc\G
*************************** 1. row ***************************
              db: mysql
            name: процедура1
            type: PROCEDURE
   specific_name: процедура1
        language: SQL
 sql_data_access: NO_SQL
is_deterministic: NO
   security_type: DEFINER
      param_list:
         returns:
            body: begin end
         definer: root@%
         created: 2005-07-07 21:11:08
        modified: 2005-07-07 21:11:08
        sql_mode: ANSI_QUOTES,IGNORE_SPACE,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
         comment:
1 row in set (0.00 sec)

mysql> drop procedure процедура1;
ERROR 2013 (HY000): Lost connection to MySQL server during query
mysql>
[7 Jul 2005 19:31] Andrey Hristov
Crashes also on SHOW CREATE PROCEDURE
[8 Jul 2005 13:42] Per-Erik Martin
Duplicate of BUG#11365