又是MySQL5.0数据库服务器乱码问题!

本文介绍了一位开发者在使用CodeBlocks+MinGW+MySQL时遇到的字符集冲突问题,通过调整MySQL字符集设置解决了“数据宽度太长”的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          近一段时间里,本人需要用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。于是把家里的电脑也如此重装一遍,编译通过,执行正确了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值