如何设置mysql的配置文件,可使得程序访问数据库时,不使用 set names。。语句,也可以有 和从控制台窗口访问数据库一样的 字符集变量

dubiousway 2008-12-10 08:08:33

首先呢,
我在my.ini 配置文件里,不管是[client]\[mysqld]\[mysql]下,都指定了字符集default-character-set = gb2312

从控制台窗口(dos窗口)登陆数据库,
用show variables,可以看到如下结果。
| character_set_client | gb2312
| character_set_connection | gb2312
| character_set_database | gb2312
| character_set_filesystem | binary
| character_set_results | gb2312
| character_set_server | gb2312

从控制台插入数据,选择,显示都没有任何问题。

但是,

如果我编写php脚本程序访问数据库,发现是乱码;必须在程序的开始,使用 mysql_query("set names 'gb2312';")语句才能避免乱码。
我刚开始的时候感觉很奇怪,明明在配置文件里都已经设置过字符集变量了,怎么还必须使用 set names 才能避免乱码。
然后我在程序里,把字符集变量取出来显示,结果发现,程序访问数据库时,字符集变量并没有更改,client\connection 等字符集变量仍然是 latin1 .

这是怎么回事? 如何设置 配置文件,或如何配置mysql服务器,才能在程序里省略 mysql_query("set names ...语句,也能获得和控制台一样的字符集变量设置
...全文
280 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iasky 2008-12-10
  • 打赏
  • 举报
回复
查询/修改/添加数据前执行

set names 'gb2312'
dubiousway 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gingzai777 的回复:]
你直接改MySQL根目录下的My.ini,如果还不行,你把这个my.ini(修改后的)复制到WINDOWS目录下,删除掉原先在MySQL根目录的My.ini,这个问题可能是你改的my.ini不是MySQL服务系统所加载的my.ini
[/Quote]
谢谢。

我删除mysql目录下的My.ini后,mysql就启动不起来了。我查看了一下服务运行指定的文件path,就是安装目录下的my.ini,不是windows目录下的。

我把windows目录下的删除了,保留安装目录下的my.ini

结果一样,没有改变。(我试过了,这个安装目录下的my.ini的设置是影响控制台字符集变量的,说明加载的就是这个ini。但是它只影响控制台,不影响程序--也不是不影响,影响一部分,汗。)
Zijian_Zhang 2008-12-10
  • 打赏
  • 举报
回复
你直接改MySQL根目录下的My.ini,如果还不行,你把这个my.ini(修改后的)复制到WINDOWS目录下,删除掉原先在MySQL根目录的My.ini,这个问题可能是你改的my.ini不是MySQL服务系统所加载的my.ini
dubiousway 2008-12-10
  • 打赏
  • 举报
回复
这是我程序取出来的字符集变量:(可以看到,有的改过来了,有的没改。恰恰是影响乱码的三个没改,还是latin1 晕),为啥呢?

---------- php command ----------
Array
(
[0] => character_set_client
[1] => latin1
)
Array
(
[0] => character_set_connection
[1] => latin1
)
Array
(
[0] => character_set_database
[1] => gb2312
)
Array
(
[0] => character_set_filesystem
[1] => binary
)
Array
(
[0] => character_set_results
[1] => latin1
)
Array
(
[0] => character_set_server
[1] => gb2312
)
Array
(
[0] => character_set_system
[1] => utf8
)
Zijian_Zhang 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dubiousway 的回复:]
引用 1 楼 froole 的回复:
在my.cnf分别设定默认编码

BatchFile code
[mysql.server]
default-character-set=gb2312

[mysqld_safe]
default-character-set=gb2312

[client]
default-character-set=gb2312


我没有cnf的配置文件。版本是5.0,windows 下的。只有一个 ini配置文件。我需要自己建一个cnf文件吗?
应该和my.ini 作用一样吧。 我配置文件里没有[mysqld_safe],我加了这一行,也不管用。

关键是s…
[/Quote]直接用set names gbk;就可以了,如果要在MySQL系统上设置,你可以把My.ini文件里的默认字符集全部改为你所要的字符集名称,最好在表里面也设置统一的编码,这样访问就应该没问题了
dubiousway 2008-12-10
  • 打赏
  • 举报
回复
我也知道肯定是不全。

但是还能在哪里设置呢。关键是要改变哪个字符集变量才能起作用呢?show variables 可以看到,能改的都已经改过来了
dubiousway 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 froole 的回复:]
在my.cnf分别设定默认编码

BatchFile code
[mysql.server]
default-character-set=gb2312

[mysqld_safe]
default-character-set=gb2312

[client]
default-character-set=gb2312
[/Quote]

我没有cnf的配置文件。版本是5.0,windows 下的。只有一个 ini配置文件。我需要自己建一个cnf文件吗?
应该和my.ini 作用一样吧。 我配置文件里没有[mysqld_safe],我加了这一行,也不管用。

关键是show variables 显示,所有的字符集变量都改过来了,但是,程序访问和控制台访问,好像不是同一个配置文件啊。
fxs_2008 2008-12-10
  • 打赏
  • 举报
回复
应该是你的设置不对或不全

再看看!

实际上用mysql_query("set names 'gb2312';")就足以解决字符集问题,没必要管那么多
海诗美妆 2008-12-10
  • 打赏
  • 举报
回复
在my.cnf分别设定默认编码
[code=BatchFile]
[mysql.server]
default-character-set=gb2312

[mysqld_safe]
default-character-set=gb2312

[client]
default-character-set=gb2312 [/code]

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧