相关疑难解决方法(0)

Python和MySql:Unicode和编码

我正在解析json数据并尝试将一些json数据存储到Mysql数据库中.我目前正在关注unicode错误.我的问题是我应该如何处理这个问题.

  • 我应该从数据库端处理它,如果是这样,我怎么能修改我的表呢?
  • 我应该从python那边处理它吗?

这是我的表格结构

CREATE TABLE yahoo_questions (
   question_id varchar(40) NOT NULL, 
   question_subj varbinary(255), 
   question_content varbinary(255),
   question_userId varchar(40) NOT NULL,
   question_timestamp varchar(40),
   category_id varbinary(20) NOT NULL,
   category_name varchar(40) NOT NULL,
   choosen_answer varbinary(255),
   choosen_userId varchar(40),
   choosen_usernick varchar(40),
   choosen_ans_timestamp varchar(40),
   UNIQUE (question_id)
);
Run Code Online (Sandbox Code Playgroud)

通过python代码插入时出错:

Traceback (most recent call last):
  File "YahooQueryData.py", line 78, in <module>
    +"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", (row[2], row[5], row[6], quserId, questionTime, categoryId, categoryName, qChosenAnswer, choosenUserId, choosenNickName, choosenTimeStamp))
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQLdb/cursors.py", line 159, …
Run Code Online (Sandbox Code Playgroud)

python mysql unicode encode utf-8

28
推荐指数
2
解决办法
6万
查看次数

"无法使用Windows mysql-python初始化字符集utf8mb4"

我收到错误尝试通过python 2.7 + MySQLdb 1.2.5 + sqlalchemy 1.0.9从Windows 7客户端连接到远程mysql数据库.这是最近将服务器的默认字符集更改为utf8mb4的结果.服务器正在运行MySQL 5.5.50.

我这样连接:

DB_ENGINE = sqlalchemy.create_engine("mysql+mysqldb://{user}:{pass}@{host}:{port}/{database}?charset=utf8mb4".format(**DB_SETTINGS))
Session = sqlalchemy.orm.sessionmaker(bind=DB_ENGINE)
Run Code Online (Sandbox Code Playgroud)

错误是:

  File "C:\Applications\Python27\lib\site-packages\sqlalchemy\engine\default.py", line 385, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "C:\Applications\Python27\lib\site-packages\MySQLdb\__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "C:\Applications\Python27\lib\site-packages\MySQLdb\connections.py", line 221, in __init__
    self.set_character_set(charset)
  File "C:\Applications\Python27\lib\site-packages\MySQLdb\connections.py", line 312, in set_character_set
    super(Connection, self).set_character_set(charset)
sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2019, "Can't initialize character set utf8mb4 (path: C:\\mysql\\\\share\\charsets\\)")
Run Code Online (Sandbox Code Playgroud)

服务器的my.cnf包含以下内容:

init_connect                   = 'SET collation_connection = utf8mb4_unicode_ci'
init_connect                   = 'SET NAMES utf8mb4'
character-set-server …
Run Code Online (Sandbox Code Playgroud)

python mysql windows mysql-python utf8mb4

9
推荐指数
1
解决办法
4978
查看次数

在 Python 中,如何替换字符串中的所有非 UTF-8 字符?

更新:真正的问题是 MySQL utf8 不支持四字节 UTF-8 字符。

关于这个主题有几个问题,但似乎没有一个完全是我的问题,除了这个,接受的答案对我不起作用。

我正在使用该MySQLdb模块在 Python 中进行编码,并且我想将一些文本放入 MySQL 数据库中。数据库配置为 UTF-8,但文本偶尔包含非 UTF-8 四字节 UTF-8 字符。

数据库修改的 Python 代码如下所示:

connection = MySQLdb.connect(
    'localhost',
    'root',
    '',
    'mydatabase',
    charset='utf8',
    use_unicode=True)
cursor = connection.cursor()
cursor.execute(
    'update mytable set entryContent=%s where entryName=%s',
    (entryContent, entryName))
connection.commit()
Run Code Online (Sandbox Code Playgroud)

它目前产生这个警告:

./myapp.py:233: Warning: Invalid utf8 character string: 'F09286'
  (entry, word))
./myapp.py:233: Warning: Incorrect string value: '\xF0\x92\x86\xB7\xF0\x92...' for column 'entry' at row 1
  (entryname, entrycontent))
Run Code Online (Sandbox Code Playgroud)

当我使用mysql命令行客户端查看实际进入数据库的内容时,我看到内容在第一次出现时被截断非 UTF-8 四字节 UTF-8 字符。

我不在乎保存 …

python mysql encoding utf-8

5
推荐指数
1
解决办法
9025
查看次数

标签 统计

mysql ×3

python ×3

utf-8 ×2

encode ×1

encoding ×1

mysql-python ×1

unicode ×1

utf8mb4 ×1

windows ×1