遇到标题的错误是在程序执行sql之后,查回来的结果是下面这个样子
[{u'max(t_time)': bytearray(b'2018-09-09 15:52:26'), u'name': bytearray(b'ctions'), u'value': bytearray(b'100')}, {u'max(t_time)': bytearray(b'2018-09-09 15:52:26'), u'name': bytearray(b'concurrency'), u'value': bytearray(b'2')}]
结果中出现了 bytearray
,程序里不好处理,所以这不是我想要的结果,而我的数据库里查看了这个表的创建语句,如下:
CREATE TABLE `variable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`instance_id` int(11) NOT NULL,
`variable_id` int(11) DEFAULT NULL,
`value` varchar(200) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
`insert_time` varchar(45) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
PRIMARY KEY (`id`),
KEY `instance_id_idx` (`instance_id`),
KEY `variable_id_idx` (`variable_id`),
KEY `insert_time_idx` (`insert_time`)
) ENGINE=InnoDB AUTO_INCREMENT=91716813 DEFAULT CHARSET=utf8;
可以看到 value
和 insert_time
字段都使用的是utf8_bin
类型的,这是二进制的存储类型,所以sql查询完之后,返回的结果就是bytearray
的类型。
解决的方法是:去数据库里,把这两个字段都改成utf8_genera_ci
类型就可以了。
在mysql中存在着各种utf8编码格式,以及区分作用:
1)utf8_bin
2)utf8_general_ci
3)utf8_general_cs
utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。
utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。
utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。