我用C写了一个小程序管理我自己的MP3歌曲(我将所有的MP3歌曲都保存在数据库中),
数据表中有其中两项:
Name varchar(256) utf8_general_ci
Data longblob
程序在连接数据库前将符集设为GBK:
MYSQL SQL;
mysql_options(&SQL,MYSQL_SET_CHARSET_NAME,"gb2312");
mysql_real_connect(&SQL,HOST,USER,PWD,DBNAME,NULL,0,NULL);
然后就select,update,insert等等操作一切正常,
直到有一次发现"徐若瑄"的"瑄"字在数据库中认成"?"
但将字符集改为"gbk"时再修改数据库将"?"改为"瑄"没有问题,以为一切OK了,
但后来向数据库增加歌曲时,如果字符集为"gbk"时就出错,代码如下:SIZE=MP3文件大小
char name[128],mp3name[256];
strcpy(name,"徐若瑄'2.MP3"); //注意文件名中的 瑄 与 '
file=fopen(name,"r");
char * buff,*buffer;
mysql_real_escape_string(&SQL,mp3name,name,strlen(name));
buff=new char(SIZE*2+256);
buffer=new char(SIZE*2+256);
fread(buff,1,SIZE,file);
mysql_real_escape_string(&SQL,buffer,buff,SIZE);
sprint(buff,"insert into Mp3Name set Name='%s',Data='%s'",mp3name,buffer);
mysql_real_query(&SQL,buff,strlen(buff));这就出错了,不过如果将字符集改回 gb2312 就可以插入数据记录,不过这时"瑄"字就会变成"?"了,请问是什么原因?我现在只有先用gb2312字符集先插入Data,再用gbk字符集执行SQL update,但太麻烦了,请问各位有什么方法.