免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2859 | 回复: 6
打印 上一主题 下一主题

C函数操作mysql5插入数据乱码(已经设置了字符集为utf8)! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-24 16:24 |只看该作者 |倒序浏览
已经修改了/etc/my.cnf文件,并在终端查询设置:

mysql> show variables like 'collation_%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

mysql> show variables like 'char_%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| 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                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

说明字符集设置成功了。在终端里插入中文可以显示,但程序里面通过C函数插入始终是乱码。
最后在连接数据库后加入 mysql_query(mysql,"SET NAMES utf8");成功。但问题出来了,在网上搜寻SET NAMES utf8就是设置字符集的作用,但我已经修改my.cnf,为什么还要在程序里面调用SET NAMES utf8来设置字符集。mysql的版本5.0.45

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
2 [报告]
发表于 2009-02-24 16:39 |只看该作者
my.cnf里设置的建库编码和用mysql客户端时的编码。

C用的是API。

论坛徽章:
0
3 [报告]
发表于 2009-02-24 17:12 |只看该作者
用的是c的API。
我是把usr/share/mysql/my-large.cnf 拷过来加入了两行
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8

数据库的db.opt也已经改为utf8

建库编码和用mysql客户端时的编码,怎么看和设置阿?望指教

还有是不是要设置mysql-connector-odbc和mysql-client

[ 本帖最后由 beaver84 于 2009-2-24 17:17 编辑 ]

论坛徽章:
1
白银圣斗士
日期:2015-11-23 08:33:04
4 [报告]
发表于 2009-02-24 17:18 |只看该作者
呵呵。SET NAMES utf8指的是当前你的session的连接编码。

my.cnf里设置的在2楼里说了。

现在还有什么问题?

论坛徽章:
0
5 [报告]
发表于 2009-02-24 17:25 |只看该作者
在深入浅出mysql中说要设置连接字符集和校对规则。有两种方法:
1:命令SET NAMES ***
2:在my.cnf 中
[mysql]
default-character-set=***

但是已经在my.cnf中做了修改,包括服务器字符集和校对规则,连接字符集和校对规则。
还是要调用命令SET NAMES utf8 才能插入中文不乱码。既然能插入中文说明服务端编码没错,看来在my.cnf中设置连接编码没效果,必须在每次连接数据库后用命令设置连接编码,难道这是mysql5.0.45的bug?

[ 本帖最后由 beaver84 于 2009-2-25 11:41 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-02-25 16:33 |只看该作者
以前遇到过这样的问题
看一下
数据库(show create database db_name;)  DEFAULT CHARACTER SET是不是 utf8
还有表 (show create table tb_name;) charset 是不是utf8

论坛徽章:
0
7 [报告]
发表于 2009-02-25 22:15 |只看该作者

回复 #1 beaver84 的帖子

你建库的时候,或者说建表的时候默认语言是什么?
之后改的,不影响之前存在的表,你可以通过phpadmin修改
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP