python - 存储到 MySQL 数据库时,非 Unicode 字符会更改为 "????"

标签 python mysql sql unicode

我正在围绕从 Twitter REST API 获取的推文创建一个 Web 应用程序。我遇到一个问题,在 python 控制台中打印时,韩语、中文和其他亚洲语言等非 unicode 字符可以正确显示,但是当我将其存储到 SQL 数据库时,字符串值会更改为“??????” ???”或类似的东西。

我正在使用 Twython 模块,这是我用于获取推文的代码,它工作正常,当我打印推文时,它会正确显示这些字符

from twython import Twython
import json
APP_KEY= 'abcdfefdags'
APP_SECRET = 'abcdefghdfa'
SEARCH_QUERY='russia'
SEARCH_COUNT= 3
twitter = Twython(APP_KEY, APP_SECRET, oauth_version=2)
ACCESS_TOKEN = twitter.obtain_access_token()
twitter1 = Twython(APP_KEY, access_token=ACCESS_TOKEN)

def getTweetQuery():
    return SEARCH_QUERY

def getTweetTextDict():
    tweetTempList = []
    data = []
    listOfTweets = dict()
    data = twitter1.search(q=SEARCH_QUERY, count=SEARCH_COUNT)  
    for x in range(0,SEARCH_COUNT):
        tweetData = dict()
        s = (data['statuses'][x]['text']) 
        tweetData['text'] = s
        s = (data['statuses'][x]['created_at'])
        tweetData['created_at'] = s
        s = (data['statuses'][x]['user']['name'])
        tweetData['name'] = s
        s = (data['statuses'][x]['user']['profile_image_url'])
        tweetData['profile_image_url'] = s
        listOfTweets[x] = tweetData
    return listOfTweets

这是我将它们存储到 SQL 数据库时的代码

import mysql.connector
from firstsite.website import twit
class SQLDataSystem:
    def insertNewTweets(self):
        cnx = mysql.connector.connect(user='djangouser', password='1234',
                              host='127.0.0.1',
                              database='django_db')

        cursor = cnx.cursor()                                                            
        dataPacket = twit.getTweetTextDict()

        dataPacketLength = len(dataPacket.keys())
        for x in range (0, dataPacketLength):
            tweet = dataPacket[x]['text']
            tweetTime = dataPacket[x]['created_at']
            twitterName = dataPacket[x]['name']
            twitterPicture = dataPacket[x]['profile_image_url']
            add_tweet = ("INSERT INTO website_tweets " +
                         "(tweet, tweetTime, twitterName, twitterPicture) "+
                         "VALUES (%s, %s, %s, %s)")
            arguments = (tweet, tweetTime, twitterName, twitterPicture)
            cursor.execute(add_tweet, arguments)
            cnx.commit()

当我通过

检查数据库时
SELECT * FROM website_tweets;

以及通过Python检索并打印它,一个可能已经说过的字符串 '@nytvideo @@KOREA:왜 테러리스트들은 구속하지 않나요??' 变成 '@nytvideo @@韩国:? ? ?????? ???? ????' 我该如何解决这个问题?

最佳答案

需要检查的三件事是:

  1. 数据库的排序规则 - 您需要它是 UTF8,而不是 Latin1 或其他内容。
  2. 在连接本身中 - use_unicode=True
  3. 确保您的 unicode 字符串不会意外转换为普通字符串(格式化往往会发生这种情况)

关于python - 存储到 MySQL 数据库时,非 Unicode 字符会更改为 "????",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24150204/

相关文章:

mysql - 如何使用 MySQL 命令检查两个以上表中存在的行

mysql - 列出子查询中提到的表中的列(MySQL)

sql - 如何使用 Caché SQL 读取类参数?

sql - sql的UNION子句性能问题

python - 如何在根据目标地址发送消息之前确定源地址?

python - 关于小部件="selection"的说明

python - 生成器与 Python 中的列表理解性能

python - numpy.array 中的零条目是否占用内存?

mysql - Django order_by 导致查询很慢

mysql - MySQL检查手册语法错误