python mysql 插入数据问题:Warning: Incorrect string value: '\xF0\x9F\x9A\xB6\xE7\x81...' for column 'nickname' at row 1

2014-10-14 10:47:16 +08:00
 larkifly
插入的数据是 \U0001f6b6\u7070\u5154\u5b50\U0001f430 \U0001f37c

数据库已经设置为utf8编码了
8616 次点击
所在节点    Python
10 条回复
larkifly
2014-10-14 11:00:47 +08:00
发现了,平时是3位utf8代表一个unicode字符,现在是4位utf8,表示一个unicode字符,请问如何统一成三位的了
dorentus
2014-10-14 11:07:59 +08:00
UTF-8 并不是最长就是 3 字节的。

解决方法可以参见: https://www.v2ex.com/t/137724#reply23
Azone
2014-10-14 11:21:01 +08:00
我记得 UTF-8 编码应该是 1-4 位变长的吧
timonwong
2014-10-14 11:27:14 +08:00
@Azone
就目前的Unicode范围来说,是1-6字节

unicode codepoint range: 0x00000000 ~ 0x7FFFFFFF
larkifly
2014-10-14 11:39:58 +08:00
@dorentus
@Azone
@timonwong

我现在有个unicode对象:\U0001f6b6,如何把它变成字符串'0001f6b6',或者我只想要f6b6,该怎么做了
timonwong
2014-10-14 11:46:16 +08:00
@larkifly
你确定是 f6b6 而不是 1f6b6?
Azone
2014-10-14 11:50:19 +08:00
timonwong
2014-10-14 12:40:38 +08:00
@Azone
嗯,你是对的,0~10FFFF 已包含目前全部定义的 code point
jjliangxueyan
2014-10-14 15:07:35 +08:00
在插入的数据 的py文件里加入:
import sys
reload(sys)
setdefaultecoding("utf-8")

在连接数据库时候跟上 charset='utf8' 参数
一般这样问题就解决了。
larkifly
2014-10-14 20:36:16 +08:00
谢谢楼上各位,问题已经解决了,还是编码问题,emoji表情在mysql存储时应该用utf8mb4编码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/138790

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX