- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力让 Python 与我的 UTF-8 编码的 MySQL 数据库(例如包含挪威字符 æøå
)兼容。我已经搜索了几个小时,但没能找到任何能按预期工作的东西。以下是从数据库中提取的示例表:
mysql> select * from my_table;
+----+-----------------+
| id | shop_group_name |
+----+-----------------+
| 1 | Frukt og grønt |
| 2 | Kjøtt og fisk |
| 3 | Meieriprodukter |
| 4 | Frysevarer |
| 5 | Bakevarer |
| 6 | Tørrvarer |
| 7 | Krydder |
| 8 | Hermetikk |
| 9 | Basisvarer |
| 10 | Diverse |
+----+-----------------+
10 rows in set (0.00 sec)
所以数据肯定是UTF-8编码的。但是,当运行以下 Python 代码时,它不会给出输出 int UTF-8。这可能有什么问题吗?这与 zipper 无关; cursor.execute(query)
返回的元组已经搞乱了编码。
#!/usr/bin/env python
import MySQLdb
db = MySQLdb.connect(host="localhost",
user="test",
passwd="passwd",
db="mydb",
charset='utf8',
use_unicode=True)
# Set desired conversion of data.
db.converter[MySQLdb.FIELD_TYPE.NEWDECIMAL] = float
db.converter[MySQLdb.FIELD_TYPE.DATETIME] = str
db.converter[MySQLdb.FIELD_TYPE.LONGLONG] = int
db.converter[MySQLdb.FIELD_TYPE.LONG] = int
db.converter[MySQLdb.FIELD_TYPE.DATETIME] = str
db.converter[MySQLdb.FIELD_TYPE.DATETIME] = str
db.converter[MySQLdb.FIELD_TYPE.DATETIME] = str
cursor = db.cursor()
query = 'SELECT * FROM my_table'
allResults = {}
cursor.execute(query)
columns = [desc[0] for desc in cursor.description]
rows = cursor.fetchall()
results = []
for row in rows:
row = dict(zip(columns, row))
results.append(row)
allResults['my_table'] = results
cursor.close()
db.close()
allResults
字典现在包含:
{
'my_table': [
{
'id': 1,
'shop_group_name': 'Fruktoggr\xf8nt'
},
{
'id': 2,
'shop_group_name': 'Kj\xf8ttogfisk'
},
{
'id': 3,
'shop_group_name': 'Meieriprodukter'
},
{
'id': 4,
'shop_group_name': 'Frysevarer'
},
{
'id': 5,
'shop_group_name': 'Bakevarer'
},
{
'id': 6,
'shop_group_name': 'T\xf8rrvarer'
},
{
'id': 7,
'shop_group_name': 'Krydder'
},
{
'id': 8,
'shop_group_name': 'Hermetikk'
},
{
'id': 9,
'shop_group_name': 'Basisvarer'
},
{
'id': 10,
'shop_group_name': 'Diverse'
}
]
}
我真的看不出我做错了什么。我正在 Ubuntu 中的 Python 2.7.6 中运行测试。
我尝试通过转储数据库并更改转储文件中的字符集和排序规则,然后将其插入新数据库,将表更改为 UTF-8。例如,转储文件的这一部分对应于上面的示例。事情是这样的:
DROP TABLE IF EXISTS `my_table`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`shop_group_name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
这就是我将这部分更改为:
DROP TABLE IF EXISTS `my_table`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`shop_group_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
但是,这仍然不起作用。输出仍然与上面相同。运行 SELECT CHARACTER_SET_NAME FROM information_schema.columns WHERE TABLE_NAME = 'my_table';
现在会生成 utf8
。
最佳答案
创建表时,以 UTF-8 创建列:
CREATE TABLE my_table (
...
shop_group_name VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci
);
如果您不指定字符集和排序规则,则 MySQL 使用默认的字符集和排序规则。或者,您可以在 mysql.cnf 中设置默认值。 。
关于python - 在 Python 中连接到 MySQL 数据库时 UTF-8 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903319/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!