Bug #4417 binary character set breaks multi-byte table/field name.
Submitted: 6 Jul 2004 12:03 Modified: 3 Sep 2004 7:04
Reporter: Alexander Barkov Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server Severity:S1 (Critical)
Version:4.1.x OS:Any (any)
Assigned to: Alexander Barkov CPU Architecture:Any

[6 Jul 2004 12:03] Alexander Barkov
Description:
binary character set break multi-bytes char table/field name.

How to repeat:
mysql --default-character-set=binary test
mysql> CREATE TABLE `....` (`....` text);
where `....` is multibyte-chars. 0xA4F3

mysql> SHOW TABLES;

return invalid broken name.

MySQL convert table and field name to 0xC2A4C3B3
[6 Jul 2004 12:05] Alexander Barkov
Looks like Latin1 -> UTF8  conversion is applied,
instead of copying AS IS.
[12 Jul 2004 22:25] Shuichi Tamagawa
It is the same for database name.
[13 Jul 2004 6:46] Shuichi Tamagawa
Hi bar,

I just want to let you know that this problem also affects ENUM values in the result of  'SHOW CREATE TABLE', 'SHOW COLUMNS FROM' command and mysqldump program.

How to repeat:
shell> mysql --default-character-set=binary test
mysql> CREATE TABLE t1(c1 enum('xxx','yyy','zzz'));

#'xxx' is ujis 0xA4A2
#'yyy' is ujis 0xA4A4
#'zzz' is ujis 0xA4F3

mysql> SHOW CREATE TABLES t1;
mysql> SHOW COLUMNS FROM t1;
mysql> EXIT
shell> mysqldump test t_enum --default-character-set=binary -u root

MySQL converts...
 0xA4A2 -> 0xC2A4C2A2
 0xA4A4 -> 0xC2A4C2A4
 0xA4F3 -> 0xC2A4C3B3
[19 Jul 2004 14:02] Alexander Barkov
I verified this behaviour. The same happens with:

CREATE TABLE t1 (a char(10) DEFAULT 'xxx');

I'm reopening the bug, will fix it asap.
[11 Aug 2004 11:12] Alexander Barkov
Thank you for your bug report. This issue has been committed to our
source repository of that product and will be incorporated into the
next release.

If necessary, you can access the source repository and build the latest
available version, including the bugfix, yourself. More information 
about accessing the source trees is available at
    http://www.mysql.com/doc/en/Installing_source_tree.html

Additional info:

It's now fixed. After "SET NAMES binary"  all metadata is sent in UTF8:
column names, enum values, default values for both "SHOW CREATE TABLE"
and "SHOW COLUMNS".
[3 Sep 2004 3:53] Shuichi Tamagawa
Bar

It seems that multi-byte table/field names are not accepted after this fix if "SET NAMES binary" is executed. When I create a table with Japanese characters, it returns "ERROR 1300 (HY000): Invalid utf8 character string: 'T1'". Is this the expected behavior after this fix?

Try

SET NAMES binary;
CREATE TABLE t1(c1 char(5));   /* works fine */
CREATE TABLE `T1`(`C1` char(5));   /* returns error */

Note: This comment can be viewed in ujis(euc-jp) encoding.
[3 Sep 2004 7:04] Alexander Barkov
Shuichi, yes it is expected behaviour.
"SET NAMES binary" means no character set conversion
is applied neither to data nor to meta-data (column,
database, table names) when transferring from client
to server. It means you have to provide correct
table/field/database names in UTF-8.

If you want to write names in UJIS, you should use
"SET NAMES ujis". There are no other possible ways
to write UJIS names.