保存到 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 PRO 终端连上 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 x8 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 |