您的位置:首页 > 数据库 > MySQL

编程查询mysql中文乱码问题

2014-11-07 10:34 351 查看
众所周知,utf8兼容中文是最好的,因为这种编码中,一个汉字占用3个字节,空间更大,所以能存储的编码更多。当然,也浪费了一点点的空间。不过这是十分值得的。

我们都知道,使用命令行($mysql -u root -p的方式 )登录mysql时,select如果出现乱码,那么需要对mysql服务器设置字符集,此时select是正常的。但是,如果我们编写程序调用API对mysql查询时,对于中文字段,仍旧会出现很多"?????"之类的乱码。为啥?

原因就在于当我们连接mysql后,没有指定字符集,故而使用默认的字符集(不知道是什么,但肯定不是utf8)。

那么我们如何指定字符集呢?

答案是:调用mysql_set_character_set()函数。注意:这是mysql 5.0.7之后才有的函数。

下面是一个经典的C连接代码块:

int initDB(MYSQL *ms)
{
mysql_init(ms);

if(!mysql_real_connect(ms, "192.168.1.170", "likai", "wolegequ", "myDB", 3306, NULL, 0))
{
printf("cannot connect to MySql server, ErrInfo:[%s]!\n", mysql_error(ms));
return -1;
}

/* 设置字符集(DB中设置了字符集只能保证在mysql中显示正确,并不能保证查询获得的结果编码正确,故此处需设置) */
if (mysql_set_character_set(ms, "utf8" ))
{
printf("Set charset err,Info:[%s].\n", mysql_error(ms)) ;return -1;
}
return 0;
}经过上面的调用后,中文结果的返回,应该就是正常了(这段代码本人摘自曾经的项目,稍改即可用)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql c