mysql的汉字编码问题已经有很多人遇到过,但我的情况比较特殊,网上找到的几乎所有的帖子都不行,只好在这里请教大家了。我的mysql版本为5.1,分别安装在windows和linux下两个系统下进行测试,最终结果都一样。
把建立的库、表,varchar字段的默认字符集全部设置为utf-8. 连接的默认字符集也设置为utf-8。
show variables like "char%";
"character_set_client","utf8"
"character_set_connection","utf8"
"character_set_database","utf8"
"character_set_filesystem","binary"
"character_set_results","utf8"
"character_set_server","latin1"
"character_set_system","utf8"
"character_sets_dir","C:\\Program Files\\MySQL\\MySQL Server 5.1\\share\\charsets\\"客户端程序在windows下为了能够连接mysql,安装了mysql-connector-odbc5.1.5。
现在使用ado操作建立的表,使用中文gb2312,读取都没有问题。但是,在linux下编写的程序,直接使用mysql的sdk,依然写gb2312编码的汉字到数据库,程序提示成功,但相应字段中实际上没有任何汉字,也读取不到任何内容。请问如何解决?
把建立的库、表,varchar字段的默认字符集全部设置为utf-8. 连接的默认字符集也设置为utf-8。
show variables like "char%";
"character_set_client","utf8"
"character_set_connection","utf8"
"character_set_database","utf8"
"character_set_filesystem","binary"
"character_set_results","utf8"
"character_set_server","latin1"
"character_set_system","utf8"
"character_sets_dir","C:\\Program Files\\MySQL\\MySQL Server 5.1\\share\\charsets\\"客户端程序在windows下为了能够连接mysql,安装了mysql-connector-odbc5.1.5。
现在使用ado操作建立的表,使用中文gb2312,读取都没有问题。但是,在linux下编写的程序,直接使用mysql的sdk,依然写gb2312编码的汉字到数据库,程序提示成功,但相应字段中实际上没有任何汉字,也读取不到任何内容。请问如何解决?
MySQL 中文显示乱码
select hex(col) from table where id=3 看一下是没内容NULL,还是有内容没显示?
显示的内容为 00
[root@localhost ~]# cat test.c
#include <mysql.h>
#include <stdio.h>
int main(){
MYSQL mysql; // need a instance to init
MYSQL_RES *res;
MYSQL_ROW row;
char *query;
int t,r;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,"localhost", "omc", "omc888", "test",0,NULL,0))
{
printf( "Error connecting to database: %s\n",mysql_error(&mysql));
}
else printf("Connected...\n");
// execute the insert query
query = "insert into T values(102, '";
char s[14]={0},ss[100];
//gb2312,汉字:啊
s[0]=0xb0;
s[1]=0xa1;
strcpy (ss,query);
strcat (ss,s);
strcat (ss,"')");
printf("%s\n",ss);
t = mysql_real_query(&mysql,query,(unsigned int) strlen(ss));
if (t)
{
printf("Error making query: %s\n",
mysql_error(&mysql));
}
else printf("[%s] made...\n", ss);
sleep(1);
mysql_close(&mysql); return 0;
}
s[1]=0xa1;b0a1 是啊?还是 数字 45217 ? 还是GBK编码中的字符? 你在哪说明了呢?想一下这个问题
long 是什么? 长? 龙?
char s[14]={0},ss[100];
//gb2312,汉字:啊
s[0]=0xb0;
s[1]=0xa1;
strcpy (ss,query);
strcat (ss,s);
strcat (ss,"')");
printf("%s\n",ss); ss串就是"insert into T values(102, '啊')"
是不是可以当作SQL语句,直接执行?
但你应该知道
insert into T values(102, '啊')
对计算机来说其实 啊 就 是 b0a1 ,但 b0a1 未必是 啊。
你可以看完一楼的贴子然后再问吗?set names 'gb2312';