MySQL 中取出中文数据全是问号?

2016-08-24 16:39:23 +08:00
 NaVient

保存到 MySQL 中的中文数据是正常的,但是取出来就全变问号了。

想了想是编码的原因,但是后面检查用的都是 utf-8 ,没问题。

还有什么原因会导致?

9645 次点击
所在节点    Python
20 条回复
clavichord93
2016-08-24 17:02:13 +08:00
数据库里面的编码要设成 utf8-general-ci
NaVient
2016-08-24 17:19:17 +08:00
@clavichord93 设置是 utf-8-general-ci
qiayue
2016-08-24 17:23:38 +08:00
终端连上 mysql 查询数据看看是否正常,如果保存的都不正常,那就是保存出问题了,如果保存的正常,那就是取数据出问题了
majunbo
2016-08-24 17:24:35 +08:00
server utf8
client utf8
从来没有出过问题。
NaVient
2016-08-24 17:27:37 +08:00
@majunbo 数据库全部设置成 utf8 了
NaVient
2016-08-24 17:27:56 +08:00
@qiayue 终端看数据是正常的
herozzm
2016-08-24 17:30:05 +08:00
数据入库和出库编码要一致,我怀疑你是在数据存入的时候使用非 utf8 编码,你读取的时候用 utf8 肯定是乱码的
NaVient
2016-08-24 17:30:27 +08:00
@qiayue 取数据就是正常的用 Mysqldb 取数据,打印出来全是问号,以为是 win7 编码的问题,结果直接放到页面上也是问号。
xujif
2016-08-24 17:35:20 +08:00
set names utf8. client 配置
est
2016-08-24 17:37:05 +08:00
windows 开发者你好。

gbk 编码爱好者你好。
yw79641760
2016-08-24 17:41:18 +08:00
连接 mysql 的 url 后面加上参数试试

jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?useUnicode=true&characterEncoding=UTF-8
lizon
2016-08-24 17:47:24 +08:00
打印输出各个环节的 Bytes ,比如输入的原始 Bytes ,数据库存储的 Bytes ,数据库取出来的 Bytes ,先定位到底哪个环节出的问题
icebreaker
2016-08-24 21:46:52 +08:00
php 中遇见个此情况,解决是 pdo->exec('SET NAMES "utf8"'); 也可以连接数据库的时候加入参数 charset='utf8'。不然存入的时候是乱码,出来也是乱码。
arischow
2016-08-24 22:52:53 +08:00
mac 遇过, mysql shell 里面设了一次 utf8 (之前 latin1) 不知怎么就好了..
cnhongwei
2016-08-24 22:56:45 +08:00
终端下正常的话,很有可能就是在终端下使用 gbk 编码保存过数据。使用一个 gui 工具试试保存再读取吧。
em70
2016-08-24 23:05:38 +08:00
用的什么语言
cxbig
2016-08-25 00:05:57 +08:00
- 检查数据库和表的 charset 和 collate 是不是 utf8 和 utf8_general_ci
- 检查输入的中文文本是不是 utf8
- 检查输出终端是不是或支不支持 utf8 显示

@clavichord93 @NaVient COLLATE 定义是 utf8_general_ci
tedzhou1221
2016-08-25 01:28:51 +08:00
告诉你一个秘密: 连接数据库时,那个登录页面,就是要填帐号密码的下面有个选项,是说用什么编码去连接数据库,你可以尝试去选 Auto
shenmimu
2016-08-25 11:22:29 +08:00
遇到过一次 表编码改成了 utf8-general-ci 字段还是 latin-1
qinxi
2016-08-25 15:49:11 +08:00
[client]
default-character-set = utf8mb4

[mysql]

default-character-set=utf8
default-character-set = utf8mb4


[mysqld]
lower_case_table_names=1 //这个没啥用就是忽略表名大小写
character-set-server=utf8

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

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

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

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

© 2021 V2EX