1.sqlite3

import sqlite3
con=sqlite3.connect("g:\\mytest1.db")
cur=con.cursor()
cur.execute('create  table test (上市  TEXT)')
con.commit()
cur.close()
con.close()

我成功创建了一个测试表mytest1.db,并将汉字名称“上市”作为字段。

2.在mysql命令控制台中。

C:\Users\root>mysql -uroot -p   
Welcome to the MySQL monitor.  Commands end with ; or \g.  
mysql> create database mytest2;  
Query OK, 1 row affected (0.00 sec)  
mysql> use mytest2;  
Database changed  
mysql> set names "gb2312";  
Query OK, 0 rows affected (0.00 sec)  
mysql> create table  stock(上市 TEXT) ;  
Query OK, 0 rows affected (0.07 sec)  

可以得出结论:汉字可以在mysql控制台中使用。

3.pymysql

code31

import pymysql
con = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='******')
cur=con.cursor()
cur.execute("create database  if not exists mytest31")
cur.execute("use mytest31")
cur.execute('set names "gb2312" ')
cur.execute('create table  stock(上市 TEXT) ')
con.commit()

CODE32

import pymysql
con = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='******')
cur=con.cursor()
cur.execute("create database  if not exists mytest32")
cur.execute("use mytest32")
cur.execute('set names "gb2312" ')
cur.execute('create table  stock(上市  TEXT) ')
con.commit()

发生同样的问题

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 21-22: o rdinal not in range(256)

4.mysql的Python-CONNECT

代码41

import mysql.connector  
config={'host':'127.0.0.1', 
        'user':'root',  
        'password':'123456',  
        'port':3306 , 
        'charset':'utf8' 
        }  

con=mysql.connector.connect(**config) 
cur=con.cursor()
cur.execute("create database  if not exists mytest41")
cur.execute("use mytest41")
cur.execute('set names "gb2312" ')
str='create table  stock(上市  TEXT)'
cur.execute(str)

代码42

import mysql.connector  
config={'host':'127.0.0.1', 
        'user':'root',  
        'password':'******',  
        'port':3306 , 
        'charset':'utf8' 
        }  

con=mysql.connector.connect(**config) 
cur=con.cursor()
cur.execute("create database  if not exists mytest42")
cur.execute("use mytest42")
cur.execute('set names "gb2312" ')
str='create table  stock(上市.encode("utf-8") TEXT)'
cur.execute(str)

相同的错误,例如在pymysql中。

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 22-23: o
rdinal not in range(256)

无疑,python mysql模块中的一个错误是不能将汉字用作字段名。
1.在python sqlite3模块中,中文字符可用作字段名称。
2.只有在“设置名称为“ gb2312”“的情况下,汉字才能在mysql控制台中用作字段名称。

===============>>#1 票数:5 已采纳

pymysql.connect() 接受一个charset参数 我已经测试过charset="utf8"charset="gb2312"并且都可以使用(Python 3,PyMySQL 0.6.2)。 在这种情况下,您无需使用"SET NAMES"查询。

import pymysql
con = pymysql.connect(host='127.0.0.1', port=3306,
                      user='root', passwd='******',
                      charset="utf8")
cur = con.cursor()
cur.execute("create database if not exists mytest31")
cur.execute("use mytest31")
cur.execute("create table stock(上市 TEXT)")
con.commit()

===============>>#2 票数:0

您应该在decodeencode 要将汉字转换为Unicode字符,请使用:

"上市".decode("GB18030")

这是中文字符通常使用的编码。 latin-1无法使用,因为大多数汉字不在其范围内。 GB18030编码应该可以使用,但如果不能,则可以尝试多种其他编码,例如gbkbig5_hkscs (通常用于在香港/中国境内进行的编码)。

Unicode错误很容易发现,它们显示为u'\�' (编码时将是中间带有问号的菱形)。

我希望这可以帮到你!

编辑:您的评论让我有些困惑。

>>> print type("上市")
<type 'str'>
>>> print type("上市".decode("GB18030"))
<type 'unicode'>

str.decode()返回unicode。

  ask by it_is_a_literature translate from so

未解决问题?本站智能推荐:

1回复

使用pymysql和sqlalchemy在mysql中创建表

我在使用python 3.3在mysql中创建表时遇到问题。 我正在使用Pymysql-0.15和SQLAlchemy。 目前,我正在Pythonwin中运行此代码,并具有以下输出。 annyone可以帮我解决这个问题吗?
1回复

使用pymysql插入表

我正在解析一个网站,并想插入MySQL。 有6个字段需要解析特定字段下的每个url。 有谁知道我如何使用pymysql将MySQL表转换为Python中的字典对象? 我如何用我拥有的数据填充SQL插入语句。 这是我的数据 它产生这个错误
2回复

在查询PyMySQL中使用WHERE

我试图创建一个程序,用户可以在其中输入运算符,即<>或=,然后在pymysql中输入数据库的编号。 我尝试了多种不同的方法来完成此操作,但不幸的是未成功。 我有两个显示为一个的文档,并将显示导入到另一个文档中。 文档1 文件二 我收到以下错误。 pym
2回复

如何在PyMySQL lib中使用返回值关闭连接?

我有以下代码: 我想将print(result)更改为return所以我可以这样做: 但是,如果我将print(result)更改为return result ,则将不会执行finally块。 有一种更好的方法来管理连接和处理错误,同时能够从查询中返回值吗?
2回复

如何在python中使用PyMYSQL将数据存储到数据库

我正在抓取一个网站并从中获取公司详细信息,现在我试图将数据存储到数据库中。 但是我遇到了一些错误 这是我的代码 我正在获取所需的数据,但无法将数据存储到数据库中。 我在打印(公司名称)和打印(campanyaddress)时得到的结果是:
1回复

如何在使用pymysql上传期间解决pymysql.err.programmingError

我想创建一个数据框并将其更新为mysql。 如果有重复的密钥,它将被更新,如果没有重复的密钥,将被插入。 但是,出现以下错误。 我如何解决它?
1回复

检查在PyMySQL中使用SELECT的INSERT是否成功

我有一个INSERT查询,它从SELECT语句中获取值。 但是由于SELECT返回了数百万条记录,因此它在MySQL服务器上增加了太多的负载。 因此,我们决定将SELECT查询分为多个部分,并通过使用LIMIT子句执行。 我们将继续增加开始和结束值,直到SELECT返回0行。 我也
4回复

在烧瓶中使用pymysql时出错

我正在使用pymysql客户端连接到我的烧瓶API中的mysql,一切正常工作了几天(大约1-2天)后突然它开始抛出这个错误 如果重新启动应用程序它再次工作正常,我已经尝试了一切,但似乎无法摆脱这个,任何人都可以帮忙吗? 正如所建议的那样,我实现了一种重试机制,但这并没有解决问题
1回复

使用PyMySQL在MySQL中将数据插入表中

我尝试将一些数据插入如下所示的表中,但对我而言不起作用。 运行此代码后没有出现任何错误消息,但是我尝试插入的新数据根本没有显示在表“ boxoffice”中... 有谁有个好主意来解决这个问题?
2回复

在pymysql中使用正确的语法将python变量传递给查询

我试图将一个字符串x的变量x传递给python查询以获取输出。 我正在使用pymysql,但是当我运行它时出现错误: 注意:我暂时已将x的导入注释掉,它实际上是用户在登录页面上输入的用户名 错误: