近一段时间里,本人需要用CodeBlocks+MinGW+MySQL这三个工具写一些程序,
发现了一些问题。
在mysql的command line client窗口中不管是汉字还是英文,数字都显示正常。但在
执行这个小程序却提示:data too long for column...
程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
#include <mysql.h>
int main()
{
/*MYSQL com_10_2;
mysql_init(&com_10_2);
if(!mysql_real_connect(&com_10_2, "localhost","root","1976","rsglxt",3306,NULL,0))
{
fprintf(stderr,"连接数据库失败:%s/n",mysql_error(&com_10_2));
}
else
{
printf("数据库连接成功!/n");
}
mysql_close(&com_10_2);*/
MYSQL com_10_3;
char* cr = "insert into employees values('0004','王西','男',24,'315246198312110548','86428462','东','主任')";
mysql_init(&com_10_3);
if (!mysql_real_connect(&com_10_3,"localhost","root","1976","rsglxt",3306,NULL,0))
{
fprintf(stderr,"连接数据库失败:%s/n",mysql_error(&com_10_3));
}
else
{
if (mysql_query(&com_10_3,cr))
{
fprintf(stderr,"查询失败:%s/n",mysql_error(&com_10_3));
}
else
{
printf("插入记录成功!");
}
}
mysql_close(&com_10_3);
return 0;
}
错误提示意思是数据宽度太长不适合此列。百思不得其解。
于是我想是不是字符编码有冲突?看一下CodeBlcoks的file encoding设的是system default, 即系统默认.
xp的默认字符编码是GBK(cp936 or windows-936).再看一下MySQL的字符编码(MySQL的字符编码有很多项
如下:可通过show variables like '%character%';命令来查看!
character_set_client=utf8
character_set_connection=utf8
character_set_database=utf8
character_set_filesystem=binary
character_set_results=utf8
character_set_server=utf8
character_set_system=utf8
即MySQL的所有字符集设置项均为utf8,是不是与操作系统及开发工具不符造成的呢?
修改mysql安装目录中的my.ini文件。将default-character-set.共两处客户端一处服务器一处。
结果还是不行。但是我办公室的电脑怎么好使呢?回办公室一年,原来安装MySQL选择字符集选择的
是默认标准字符集-latia1。于是把家里的电脑也如此重装一遍,编译通过,执行正确了!