我正在解析json数据并尝试将一些json数据存储到Mysql数据库中.我目前正在关注unicode错误.我的问题是我应该如何处理这个问题.
这是我的表格结构
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 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) 更新:真正的问题是 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 字符。
我不在乎保存 …