MySQL ,一字段值存的是unicode值,查询出来都是乱码了,求解决方法

khijfv2008 2010-11-22 02:18:23
MySQL ,一字段值存的是unicode值,直接查询都是乱码了,求解决方法

这个值是C++以宽字符写进库里的

有什么看函数二转换或在C#里有什么方法可以把值转回中文

如果有人朋友解决我没及时回复请Mail 1716720@qq.com
...全文
312 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
khijfv2008 2010-11-25
  • 打赏
  • 举报
回复
要不留个邮箱我把数据文件给你,你试下,网上的找到的方法我都试了

我用的是C#,写入数据人是用C++

C++接口是别人开发的,要是我了解接口怎么实现的我也可以用他的方法解码了,现在我就是不了解
ACMAIN_CHM 2010-11-25
  • 打赏
  • 举报
回复
+--------------+--------------------------+
| nickname | HEX(nickname ) |
+--------------+--------------------------+
| VV- | 0E560E562D |
| U?Q | 1055018051 |
| X=?D0)YX | 15583D84443029590258 |

为什么不同时给出这三记录所对应的实际内容应该是什么?
ACMAIN_CHM 2010-11-24
  • 打赏
  • 举报
回复
都试了哪几种?

还有,要注意你的接口程序中有没有对字符集进行重新转换。
khijfv2008 2010-11-24
  • 打赏
  • 举报
回复
set names 那几种都试过了,,,
ACMAIN_CHM 2010-11-24
  • 打赏
  • 举报
回复
[Quote]但写数据的人提供了接口可以查出来,不是乱码的,[/Quote]关键是要找到正确的字符集,然后你 set names 'xxxx'; 就可以了。
khijfv2008 2010-11-24
  • 打赏
  • 举报
回复
mysql> select nickname, HEX(nickname ) from gs_userinfo_tbl;
+--------------+--------------------------+
| nickname | HEX(nickname ) |
+--------------+--------------------------+
| VV- | 0E560E562D |
| U?Q | 1055018051 |
| X=?D0)YX | 15583D84443029590258 |
| Q?R | 1B51D552 |
| | 20 |
| *s4Yn0???? | 2A7334596E30DD84DD84 |
| A | 41 |
| NgRKN6r | 4E671A524B4E3672 |
| S | 53 |
| a | 61 |
| eg?n?n | 65679C6E9C6E |
| h | 68 |
| p | 70 |
| s | 73 |
| v | 76 |
| wPwP?v*b?VN | 7750775084762A62FE560B4E |
| }v?ec?k?=\ | 7D76E56563886B883D5C |
| ?u?rKN?[? | AF75C2724B4E8C5B8E7F |
| ?r?P?vAml | C272B2508476416D136C |
| ??í??[ | CE98ED8BD25B |
| ????v?[k? | DE98D47F8476B35B6B86 |
+--------------+--------------------------+
21 rows in set (0.02 sec)


因为数据是别人写进去的,所以我不知道写进去的时候是什么样子,但写数据的人提供了接口可以查出来,不是乱码的,
ACMAIN_CHM 2010-11-24
  • 打赏
  • 举报
回复
你的表中的字符集设置是 latin1 ,这样显然,你插入的中文会被转换成latin1 编码来存放。如果你INSERT的时候设置也是latin1 则没有什么问题,但如果你INSERT的时候设置的是其它字符集则会产生编码的转换,从而导致乱码。

99%的可能是,你现在数据库表中存储的本身就是乱码了。
找一条记录SELECT出来,看看实现的编码是什么。

select nickname, HEX(nickname ) from gs_userinfo_tbl where user_id =12345677;

然后把这条记录所对应的中文也贴出来。

另外你的C++程序中使用的字符集设置是什么?建议你在你的程序中执行一下 show VARIABLES like 'character_set%';看看结果是什么?
wwwwb 2010-11-24
  • 打赏
  • 举报
回复
你的字符集不统一,不知道你表中的内容是latin1、GBK、UTF8,
估计你要在统一的字符集下重新插入记录
select hex(有中文内容的字段名) from tt
贴结果,
khijfv2008 2010-11-24
  • 打赏
  • 举报
回复
这个方法试过,行不通
khijfv2008 2010-11-24
  • 打赏
  • 举报
回复
试过了的
wwwwb 2010-11-24
  • 打赏
  • 举报
回复
你的表字符集是latin1
SET NAMES latin1
khijfv2008 2010-11-24
  • 打赏
  • 举报
回复
mysql> show full columns from gs_userinfo_tbl;
+----------+-------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+----------+-------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
| user_id | varchar(32) | latin1_swedish_ci | NO | PRI | | | select,insert,update,references | |
| nickname | varchar(32) | latin1_bin | YES | UNI | NULL | | select,insert,update,references | |
+----------+-------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
2 rows in set (0.00 sec)
khijfv2008 2010-11-24
  • 打赏
  • 举报
回复

mysql> show create table gs_userinfo_tbl;
+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| gs_userinfo_tbl | CREATE TABLE `gs_userinfo_tbl` (
`user_id` varchar(32) NOT NULL DEFAULT '',
`nickname` varchar(32) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `nickname` (`nickname`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
ACMAIN_CHM 2010-11-24
  • 打赏
  • 举报
回复
其它检查结果呢?
khijfv2008 2010-11-24
  • 打赏
  • 举报
回复

mysql> show variables like 'char%'
-> ;
+--------------------------+---------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.1\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)
wwwwb 2010-11-23
  • 打赏
  • 举报
回复
show VARIABLES like 'character_set%';
贴结果
huabing84 2010-11-23
  • 打赏
  • 举报
回复
SET NAMES GBK
ACMAIN_CHM 2010-11-22
  • 打赏
  • 举报
回复
估计,你的字段中存放的并不是UTF8的编码。
ACMAIN_CHM 2010-11-22
  • 打赏
  • 举报
回复
按下贴中方法,贴出你的检查结果。

http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
MySQL 中文显示乱码
khijfv2008 2010-11-22
  • 打赏
  • 举报
回复
以上方法好像不通呀,还有别的可行方法不
加载更多回复(4)

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧