How to get the MySQL Command-Line Tool to display Unicode properly?

Roger House <[email protected]> Tue, 13 Mar 2018 14:59:58 -0700
Newsgroups gmane.comp.db.mysql.general
Message-ID <[email protected]>
Five months ago I posted the query shown below on StackOverflow.  I got 
one reply which was not of much help.  So I am trying again, hoping a 
more MySQL-centric forum might be able to solve my problem.

Roger House


How to get the MySQL Command-Line Tool to display Unicode properly?

I use a Python program to write text containing Unicode characters to a 
MySQL database. As an example, two of the characters are

|u'\u2640' a symbol for Venus or female u'\u2642' a symbol for Mars or male |

I use utf8mb4 for virtually all character sets involved with MySQL. Here 
is an excerpt from /etc/mysql/my.cnf

|[client] default-character-set=utf8mb4 [mysql] 
default-character-set=utf8mb4 [mysqld] default-character-set=utf8mb4 
character-set-server =utf8mb4 character_set_system =utf8mb4 |

In addition, all tables are created with these parameters:

|ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |

In all respects except one, the treatment of Unicode works just fine. I 
can write Unicode to database tables, read it, display it, etc., with no 
problems. The exception is mysql, the MySQL Command-Line Tool. When I 
execute a SELECT statement to see rows in a table containing the Venus 
and Mars Unicode characters, here is what I see on the screen:

|| Venus | ♀ | | Mars | ♂ | |

What I should see in the right column are the standard glyphs for Venus 
and Mars.

Any ideas about how to get the MySQL Command-Line Tool to display 
Unicode properly?

Edit:

I have done a fair amount of research into the various MySQL system 
variables, etc., and I now realize that the my.cnf settings shown above 
have some serious issues. In fact, the server, mysqld, would not launch 
with the settings shown. To correct things, remove these from [mysqld]:

|default-character-set=utf8mb4 character-set-system=utf8mb4 |

I'm not sure that the [client] option does anything, but it doesn't seem 
to hurt.

In Python u'\u2640' represents a single Unicode character, namely "♀". 
This compiles down to three bytes containing the hex value E29980. I am 
having no problems at all encoding and decoding Unicode. The correct 
values are being stored in a MySQL table; they are correctly read from 
the table, and when displayed by a Python program they show up like this:

|♀ Venus ♂ Mars |

The program output can be redirected to a file, processed by a text 
editor, etc., and in all cases the correct Unicode symbol is displayed.

There is only one place where the correct Unicode symbol is not 
displayed, and that is when I am using the MySQL Command Line Tool. When 
I issue a SELECT statement on the table containing the Unicode symbols I 
get the junk shown above. This is not a Windows specific issue. I have 
exactly the same problem with the MySQL Command Line Tool when I run it 
on Windows, Mac OS X, and Ubuntu.