保存到 MySQL 中的中文数据是正常的,但是取出来就全变问号了。
想了想是编码的原因,但是后面检查用的都是 utf-8 ,没问题。
还有什么原因会导致?
1
clavichord93 2016-08-24 17:02:13 +08:00
数据库里面的编码要设成 utf8-general-ci
|
2
NaVient OP @clavichord93 设置是 utf-8-general-ci
|
3
qiayue 2016-08-24 17:23:38 +08:00
终端连上 mysql 查询数据看看是否正常,如果保存的都不正常,那就是保存出问题了,如果保存的正常,那就是取数据出问题了
|
4
majunbo 2016-08-24 17:24:35 +08:00
server utf8
client utf8 从来没有出过问题。 |
7
herozzm 2016-08-24 17:30:05 +08:00
数据入库和出库编码要一致,我怀疑你是在数据存入的时候使用非 utf8 编码,你读取的时候用 utf8 肯定是乱码的
|
8
NaVient OP @qiayue 取数据就是正常的用 Mysqldb 取数据,打印出来全是问号,以为是 win7 编码的问题,结果直接放到页面上也是问号。
|
9
xujif 2016-08-24 17:35:20 +08:00
set names utf8. client 配置
|
10
est 2016-08-24 17:37:05 +08:00
windows 开发者你好。
gbk 编码爱好者你好。 |
11
yw79641760 2016-08-24 17:41:18 +08:00
连接 mysql 的 url 后面加上参数试试
jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?useUnicode=true&characterEncoding=UTF-8 |
12
lizon 2016-08-24 17:47:24 +08:00
打印输出各个环节的 Bytes ,比如输入的原始 Bytes ,数据库存储的 Bytes ,数据库取出来的 Bytes ,先定位到底哪个环节出的问题
|
13
icebreaker 2016-08-24 21:46:52 +08:00
php 中遇见个此情况,解决是 pdo->exec('SET NAMES "utf8"'); 也可以连接数据库的时候加入参数 charset='utf8'。不然存入的时候是乱码,出来也是乱码。
|
14
arischow 2016-08-24 22:52:53 +08:00
mac 遇过, mysql shell 里面设了一次 utf8 (之前 latin1) 不知怎么就好了..
|
15
cnhongwei 2016-08-24 22:56:45 +08:00
终端下正常的话,很有可能就是在终端下使用 gbk 编码保存过数据。使用一个 gui 工具试试保存再读取吧。
|
16
em70 2016-08-24 23:05:38 +08:00
用的什么语言
|
17
cxbig 2016-08-25 00:05:57 +08:00
- 检查数据库和表的 charset 和 collate 是不是 utf8 和 utf8_general_ci
- 检查输入的中文文本是不是 utf8 - 检查输出终端是不是或支不支持 utf8 显示 @clavichord93 @NaVient COLLATE 定义是 utf8_general_ci |
18
tedzhou1221 2016-08-25 01:28:51 +08:00
告诉你一个秘密: 连接数据库时,那个登录页面,就是要填帐号密码的下面有个选项,是说用什么编码去连接数据库,你可以尝试去选 Auto
|
19
shenmimu 2016-08-25 11:22:29 +08:00
遇到过一次 表编码改成了 utf8-general-ci 字段还是 latin-1
|
20
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 |