Mysql отображает китайский символ как беспорядочный код, в то время как данные, полученные Pymysql, являются нормальными

Я использую pymysql для вставки данных (китайский). Код работает, и результат в порядке, когда я использую fetchall и печатаю результат. Однако, когда я вручную вхожу в mysql, я обнаруживаю, что данные представляют собой беспорядочный код, когда я использую «выбрать * из ТБ». Кодировка символов должна быть в порядке, потому что она работает, когда я вручную вставляю китайский язык в новую таблицу.

Любые предложения, пожалуйста?

Я проверил кодировку «utf-8», когда запускаю «show create database taoya» и «show create table TB».

Переменная такая:

    +--------------------------------------+--------------------------------+
| Variable_name                        | Value                          |
+--------------------------------------+--------------------------------+
| character_set_client                 | utf8mb4                        |
| character_set_connection             | utf8mb4                        |
| character_set_database               | utf8mb4                        |
| character_set_filesystem             | binary                         |
| character_set_results                | utf8mb4                        |
| character_set_server                 | utf8mb4                        |
| character_set_system                 | utf8                           |
| character_sets_dir                   | /usr/share/mysql-8.0/charsets/ |
| validate_password.special_char_count | 1                              |
+--------------------------------------+--------------------------------+

Код выглядит следующим образом:

mysql= pymysql.connect(host=xx,user=xx,password=xxx, db="taoya",charset="utf8mb4")

try:
    with mysql.cursor() as cur:
        # cur.execute("set names 'utf8'")
        cur.execute("DROP TABLE IF EXISTS TB")
        sql = '''CREATE TABLE IF NOT EXISTS TB(
        Commody CHAR(70) NOT NULL,
        Store   CHAR(20),
        Address CHAR(20),
        Price CHAR(20),
        Paid CHAR(40))
        DEFAULT CHARSET=utf8mb4
        '''
        cur.execute(sql)

        insertsql="INSERT INTO TB (Commody,Store,Address, Price,Paid) VALUES (%s, %s,%s,%s,%s)"
        data= ("牛 啊","hi","你好","$33","3人")

        cur.execute(insertsql,data)

        cur.execute("SELECT * FROM TB;")
        result = cur.fetchall()
        print(result)
        mysql.commit()
finally:
    mysql.close()

Результат в порядке:

(('牛 啊', 'hi', '你好', '$33', '3人'),)

Со стороны mysql:

mysql> select * from TB;
+------------+-------+---------+-------+------+
| Commody    | Store | Address | Price | Paid |
+------------+-------+---------+-------+------+
| 鐗涢€鍟   | hi    | 浣犲ソ    | $33   | 3浜 |
+------------+-------+---------+-------+------+

person Winnie-c    schedule 15.10.2018    source источник


Ответы (1)


Питон 2

#coding:utf-8  #for .py file
import sys
import locale
import os
import codecs

reload(sys)
print sys.getdefaultencoding() + "  - sys.getdefaultencoding()"
sys.setdefaultencoding('utf8')
print sys.getdefaultencoding() + "  - sys.getdefaultencoding()"
print sys.stdout.encoding + " - sys.stdout.encoding:"

линукс?

echo 中文汉字;
env|grep LANG
export LANG=zh_CN.UTF-8

Don't forget to check your Terminal tool's encoding setting.

Конфиг MySQL:

check:
show variables like 'character%'; 
SHOW VARIABLES LIKE 'collation%';

for client:
SET character_set_client = 'utf8mb4';
SET character_set_connection = 'utf8mb4';
SET character_set_results = 'utf8mb4';

/*
for server:
SET collation_connection = 'utf8mb4_general_ci';
SET collation_database = 'utf8mb4_general_ci';
SET collation_server = 'utf8mb4_general_ci';
*/
person Smartree    schedule 12.10.2019