c/c++操作mysql数据库使用utf8总结

简言

1. 现在编程时为了统一中英文,各国语言版本兼容性,我们都使用utf8格式存储字符串

2. mysql保存字符数据时若出现了乱码,例如中文乱码,可以确定是字符集的问题,建议统一改为utf8

3. c/c++语言操作mysql时,使用utf8编码也有很多注意要点,这里笔者做个简单的总结,避免大家踩坑

三个步骤

1. 确保mysql数据库是utf8格式,数据库的表也是utf8格式

2. 连接数据库时,调用函数,明确设置utf8字符集

3. 确保内存中的字符串是utf8编码格式

详细

1. 确保mysql数据库是utf8格式,数据库的表也是utf8格式

可以通过命令查看数据库的格式和数据库表的格式,如下:

使用命令 show create database xxxx; 来查看数据库的编码格式

使用命令 show create table xxxx; 来查看数据库表的编码格式

具体修改为utf8的办法可以使用mysql连接的编辑器来设置,也可以通过命令行来设置,笔者是使用HeidiSQL来设置的,简单

2. 连接数据库时,明确设置utf8字符集

 方法比较简单,就是调用几个函数,例如mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "utf8"), mysql_set_character_set(mysql, "utf8")之类,具体的可以参考这篇博客 

https://blog.csdn.net/yzf279533105/article/details/103938260

3. 确保内存中的字符串是utf8编码格式

办法如下:以一个汉字为例,比如“严”,查到它的unicode编码为0x4E25, 再手动转为utf8编码,三个字节即

1110 0100    1011 1000    1010 0101  这里我用红色标出了实际的位信息,前面紫色的是utf占位符

第一个字节转数字即228,第二个字节转数字即184,第三个字节转数字即165

我们把字符串“严”逐个字节打印出来即可

代码如下:

#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
	char str[10] = "严";
	printf("%u \n", (unsigned char)str[0]);
	printf("%u \n", (unsigned char)str[1]);
	printf("%u \n", (unsigned char)str[2]);
	printf("%u \n", (unsigned char)str[3]);
	printf("%u \n", (unsigned char)str[4]);

	getchar();
	return 0;	
}

打印结果如下图(可以看到前三个字节分别是228, 184, 165):

注意:在windows下如果是VisualStudio系列的编辑器,默认是GB2312的编码,必须改成utf8编码后才可以

当然,你也可以更换其他汉字,只是需先查到该汉字的unicode编码,然后手动转成utf8编码格式

可以到这个网站查所有汉字的unicode编码

http://www.mytju.com/classcode/tools/encode_gb2312.asp

可以看到“严”字的unicode是4E25,如下图

另外,如果你不会把unicode编码手动转utf8编码,笔者另外提供了一个函数来判断一个字符串是不是utf8编码

完整代码如下:

发布了105 篇原创文章 · 获赞 58 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/yzf279533105/article/details/103960320