于是我在my.ini中加了default-character-set=gbk,然后character_set_server等变成了gbk,但character_set_client等参数还是latin1.
在PhpMyAdmin中我不能直接修改character_set_client的值,用命令行方式设mysql> SET character_set_client = gbk;可以,但设好后刷新或重起MySQL后发现在PhpMyAdmin中character_set_client的值还是latin1,没有变成gbk.
此时ASP.NET页面添加有中文的信息时中文字全部没存进去(是空的),但也没报错.
请问这个问题该如何解决.
如果不行我重装数据库的话,我要如何做才能保证Mysql的缺省字符集是gbk?(系统是win server 2003)
谢谢!
10 个解决方案
#1
mark一下。明天研究。
我也是用aspnet的。嘿嘿。
我也是用aspnet的。嘿嘿。
#2
抱歉,上边说错了,是在WinMySQLadmin上没法修改character_set_client等(服务器上都没装PhpMyAdmin).
各位高人能否说说自己的看法.谢谢.
现在主要是我不知道在什么地方能控制character_set_client这些参数,我在MySQL的manual里查到了上边在控制台修改的办法,但竟然没起作用,应该是操作里面有问题吧.
另外如果重装MySQL可以解决问题那也没有问题,但是除了在my.ini中加default-character-set=gbk,其它我还应该做些什么呢?
谢谢.
各位高人能否说说自己的看法.谢谢.
现在主要是我不知道在什么地方能控制character_set_client这些参数,我在MySQL的manual里查到了上边在控制台修改的办法,但竟然没起作用,应该是操作里面有问题吧.
另外如果重装MySQL可以解决问题那也没有问题,但是除了在my.ini中加default-character-set=gbk,其它我还应该做些什么呢?
谢谢.
#3
看来这个问题没多少普遍性,所以关注的人不多.
现在我在控制台输入记录,中文都没存进去,但竟然也不报错(控制台中character_set_client等已经被设成gbk),真是郁闷.
现在我在控制台输入记录,中文都没存进去,但竟然也不报错(控制台中character_set_client等已经被设成gbk),真是郁闷.
#4
你的mysql是什么版本的,一般只需要设置default-character-set=gb2312就行了
#5
程序中动态修改
conn= new MySqlConnection(myConnectionString);
// MySqlCommand myCommand = new MySqlCommand();
// myCommand.Connection = conn;
// myCommand.CommandType = CommandType.Text;
// myCommand.CommandText = "SET character_set_client =gbk";
// conn.Open();
// myCommand.ExecuteNonQuery();
// myCommand.CommandText ="SET character_set_results = gbk";
// myCommand.ExecuteNonQuery();
// myCommand.CommandText ="SET character_set_connection = gbk";
// myCommand.ExecuteNonQuery();
另外可以用mysqladmin 的控制台winMysqlAdmin 中修改my.ini配置文件,
datadir=C:/mysql/data
下面加入
default-character-set= GBK
或者进入系统根目录 直接修改my.ini文件
conn= new MySqlConnection(myConnectionString);
// MySqlCommand myCommand = new MySqlCommand();
// myCommand.Connection = conn;
// myCommand.CommandType = CommandType.Text;
// myCommand.CommandText = "SET character_set_client =gbk";
// conn.Open();
// myCommand.ExecuteNonQuery();
// myCommand.CommandText ="SET character_set_results = gbk";
// myCommand.ExecuteNonQuery();
// myCommand.CommandText ="SET character_set_connection = gbk";
// myCommand.ExecuteNonQuery();
另外可以用mysqladmin 的控制台winMysqlAdmin 中修改my.ini配置文件,
datadir=C:/mysql/data
下面加入
default-character-set= GBK
或者进入系统根目录 直接修改my.ini文件
#6
非常感谢各位的回答.
MySQL是4.1.7,我在my.ini配置文件中加了default-character-set=gbk
后来我重装了MySQL的5.0alpha版(开发的时候用的是该版本,部署时服务器上装的是4.1.7,本来想不改了),然后发现character_set_client缺省竟然就是gbk了(my.ini配置文件没改,应该是default-character-set=gbk起作用了),然后读写数据库也就没有问题了.
但是我还是不知道为什么在4.1.7版下回出这个问题,下次碰到这个问题我想我还是不能马上解决,这点不太舒服.
准备明天结帖.
MySQL是4.1.7,我在my.ini配置文件中加了default-character-set=gbk
后来我重装了MySQL的5.0alpha版(开发的时候用的是该版本,部署时服务器上装的是4.1.7,本来想不改了),然后发现character_set_client缺省竟然就是gbk了(my.ini配置文件没改,应该是default-character-set=gbk起作用了),然后读写数据库也就没有问题了.
但是我还是不知道为什么在4.1.7版下回出这个问题,下次碰到这个问题我想我还是不能马上解决,这点不太舒服.
准备明天结帖.
#7
我设置了 default-character-set=gbk 发现 character_set_client=latin1
都烦死了,其他人又没有这个问题,我现在是 MySql 5.01 alpha
都烦死了,其他人又没有这个问题,我现在是 MySql 5.01 alpha
#8
按照MySQL manual里的说法,在控制台进入MySQL后输入set character_set_client=gbk后就可以设置character_set_client为gbk了.
我设置了,很顺利地完成了,但是在WinMySQLadmin的variable中再看character_set_client还是latin1,重起MySQL后还是一样.
未设之前我在控制台添加新记录,如果有中文会报错,gbk和latin1有Illegal mix of collations error;设好后这个错不报了,但所有中文都没有被添加到数据库中,有的字段还是不允许null的!
后来改装MySql 5.0.0 alpha版后一切正常了.
但是看了raike(云中帆)的回复我觉得这个应该和版本没有关系,应该还是我在设置MySQL的时候什么地方没设置好,只是不知道是什么地方.
我设置了,很顺利地完成了,但是在WinMySQLadmin的variable中再看character_set_client还是latin1,重起MySQL后还是一样.
未设之前我在控制台添加新记录,如果有中文会报错,gbk和latin1有Illegal mix of collations error;设好后这个错不报了,但所有中文都没有被添加到数据库中,有的字段还是不允许null的!
后来改装MySql 5.0.0 alpha版后一切正常了.
但是看了raike(云中帆)的回复我觉得这个应该和版本没有关系,应该还是我在设置MySQL的时候什么地方没设置好,只是不知道是什么地方.
#9
如果你有足够的权限,你可以设置全局变量,执行: set GLOBAL character_set_client=gbk
如果只是执行set character_set_client=gbk,只能改变当前会话的客户端字符集!
系统变量可分为两种类型:线程特定(Thread-specific)或称为连接特定(connection-specific)变量,它们是当前连接唯一的;全局变量,它们用于设置全局事件。全局变量也同样被用于设置一个新连接的相应线程特定变量的初始值。
当 mysqld 启动时,所有的全局变量以命令行参数和选项文件内容初始化。可以通过 SET GLOBAL 命令更改这些值。当一个新的连接线程被建立时,将以全局变量值初始化线程特定变量,直到你执行一个新的 SET GLOBAL 命令时,线程特定变量才会改变。
为了设置一个 全局(GLOBAL) 变量值,可以使用下面的任一句法:(在这里,我们以 sort_buffer_size 变量作为一个示例)
SET GLOBAL sort_buffer_size=value;
SET @@global.sort_buffer_size=value;
如果只是执行set character_set_client=gbk,只能改变当前会话的客户端字符集!
系统变量可分为两种类型:线程特定(Thread-specific)或称为连接特定(connection-specific)变量,它们是当前连接唯一的;全局变量,它们用于设置全局事件。全局变量也同样被用于设置一个新连接的相应线程特定变量的初始值。
当 mysqld 启动时,所有的全局变量以命令行参数和选项文件内容初始化。可以通过 SET GLOBAL 命令更改这些值。当一个新的连接线程被建立时,将以全局变量值初始化线程特定变量,直到你执行一个新的 SET GLOBAL 命令时,线程特定变量才会改变。
为了设置一个 全局(GLOBAL) 变量值,可以使用下面的任一句法:(在这里,我们以 sort_buffer_size 变量作为一个示例)
SET GLOBAL sort_buffer_size=value;
SET @@global.sort_buffer_size=value;
#10
谢谢loveflea(coolwind)回答.
刚才试着设了一下set GLOBAL character_set_client=gbk,发现在winMysqlAdmin中还是没有改变(其实因为现在character_set_client是gbk,我是在把它改成gb2312,控制台改后winMysqlAdmin关服务再开服务,发现character_set_client还是gbk,没变),但我相信正常情况就应该象你说的那样,用set GLOBAL来设.
因为要继续做下去,没有时间一直关注这个问题,就结贴了.
再次谢谢大家.
刚才试着设了一下set GLOBAL character_set_client=gbk,发现在winMysqlAdmin中还是没有改变(其实因为现在character_set_client是gbk,我是在把它改成gb2312,控制台改后winMysqlAdmin关服务再开服务,发现character_set_client还是gbk,没变),但我相信正常情况就应该象你说的那样,用set GLOBAL来设.
因为要继续做下去,没有时间一直关注这个问题,就结贴了.
再次谢谢大家.
#1
mark一下。明天研究。
我也是用aspnet的。嘿嘿。
我也是用aspnet的。嘿嘿。
#2
抱歉,上边说错了,是在WinMySQLadmin上没法修改character_set_client等(服务器上都没装PhpMyAdmin).
各位高人能否说说自己的看法.谢谢.
现在主要是我不知道在什么地方能控制character_set_client这些参数,我在MySQL的manual里查到了上边在控制台修改的办法,但竟然没起作用,应该是操作里面有问题吧.
另外如果重装MySQL可以解决问题那也没有问题,但是除了在my.ini中加default-character-set=gbk,其它我还应该做些什么呢?
谢谢.
各位高人能否说说自己的看法.谢谢.
现在主要是我不知道在什么地方能控制character_set_client这些参数,我在MySQL的manual里查到了上边在控制台修改的办法,但竟然没起作用,应该是操作里面有问题吧.
另外如果重装MySQL可以解决问题那也没有问题,但是除了在my.ini中加default-character-set=gbk,其它我还应该做些什么呢?
谢谢.
#3
看来这个问题没多少普遍性,所以关注的人不多.
现在我在控制台输入记录,中文都没存进去,但竟然也不报错(控制台中character_set_client等已经被设成gbk),真是郁闷.
现在我在控制台输入记录,中文都没存进去,但竟然也不报错(控制台中character_set_client等已经被设成gbk),真是郁闷.
#4
你的mysql是什么版本的,一般只需要设置default-character-set=gb2312就行了
#5
程序中动态修改
conn= new MySqlConnection(myConnectionString);
// MySqlCommand myCommand = new MySqlCommand();
// myCommand.Connection = conn;
// myCommand.CommandType = CommandType.Text;
// myCommand.CommandText = "SET character_set_client =gbk";
// conn.Open();
// myCommand.ExecuteNonQuery();
// myCommand.CommandText ="SET character_set_results = gbk";
// myCommand.ExecuteNonQuery();
// myCommand.CommandText ="SET character_set_connection = gbk";
// myCommand.ExecuteNonQuery();
另外可以用mysqladmin 的控制台winMysqlAdmin 中修改my.ini配置文件,
datadir=C:/mysql/data
下面加入
default-character-set= GBK
或者进入系统根目录 直接修改my.ini文件
conn= new MySqlConnection(myConnectionString);
// MySqlCommand myCommand = new MySqlCommand();
// myCommand.Connection = conn;
// myCommand.CommandType = CommandType.Text;
// myCommand.CommandText = "SET character_set_client =gbk";
// conn.Open();
// myCommand.ExecuteNonQuery();
// myCommand.CommandText ="SET character_set_results = gbk";
// myCommand.ExecuteNonQuery();
// myCommand.CommandText ="SET character_set_connection = gbk";
// myCommand.ExecuteNonQuery();
另外可以用mysqladmin 的控制台winMysqlAdmin 中修改my.ini配置文件,
datadir=C:/mysql/data
下面加入
default-character-set= GBK
或者进入系统根目录 直接修改my.ini文件
#6
非常感谢各位的回答.
MySQL是4.1.7,我在my.ini配置文件中加了default-character-set=gbk
后来我重装了MySQL的5.0alpha版(开发的时候用的是该版本,部署时服务器上装的是4.1.7,本来想不改了),然后发现character_set_client缺省竟然就是gbk了(my.ini配置文件没改,应该是default-character-set=gbk起作用了),然后读写数据库也就没有问题了.
但是我还是不知道为什么在4.1.7版下回出这个问题,下次碰到这个问题我想我还是不能马上解决,这点不太舒服.
准备明天结帖.
MySQL是4.1.7,我在my.ini配置文件中加了default-character-set=gbk
后来我重装了MySQL的5.0alpha版(开发的时候用的是该版本,部署时服务器上装的是4.1.7,本来想不改了),然后发现character_set_client缺省竟然就是gbk了(my.ini配置文件没改,应该是default-character-set=gbk起作用了),然后读写数据库也就没有问题了.
但是我还是不知道为什么在4.1.7版下回出这个问题,下次碰到这个问题我想我还是不能马上解决,这点不太舒服.
准备明天结帖.
#7
我设置了 default-character-set=gbk 发现 character_set_client=latin1
都烦死了,其他人又没有这个问题,我现在是 MySql 5.01 alpha
都烦死了,其他人又没有这个问题,我现在是 MySql 5.01 alpha
#8
按照MySQL manual里的说法,在控制台进入MySQL后输入set character_set_client=gbk后就可以设置character_set_client为gbk了.
我设置了,很顺利地完成了,但是在WinMySQLadmin的variable中再看character_set_client还是latin1,重起MySQL后还是一样.
未设之前我在控制台添加新记录,如果有中文会报错,gbk和latin1有Illegal mix of collations error;设好后这个错不报了,但所有中文都没有被添加到数据库中,有的字段还是不允许null的!
后来改装MySql 5.0.0 alpha版后一切正常了.
但是看了raike(云中帆)的回复我觉得这个应该和版本没有关系,应该还是我在设置MySQL的时候什么地方没设置好,只是不知道是什么地方.
我设置了,很顺利地完成了,但是在WinMySQLadmin的variable中再看character_set_client还是latin1,重起MySQL后还是一样.
未设之前我在控制台添加新记录,如果有中文会报错,gbk和latin1有Illegal mix of collations error;设好后这个错不报了,但所有中文都没有被添加到数据库中,有的字段还是不允许null的!
后来改装MySql 5.0.0 alpha版后一切正常了.
但是看了raike(云中帆)的回复我觉得这个应该和版本没有关系,应该还是我在设置MySQL的时候什么地方没设置好,只是不知道是什么地方.
#9
如果你有足够的权限,你可以设置全局变量,执行: set GLOBAL character_set_client=gbk
如果只是执行set character_set_client=gbk,只能改变当前会话的客户端字符集!
系统变量可分为两种类型:线程特定(Thread-specific)或称为连接特定(connection-specific)变量,它们是当前连接唯一的;全局变量,它们用于设置全局事件。全局变量也同样被用于设置一个新连接的相应线程特定变量的初始值。
当 mysqld 启动时,所有的全局变量以命令行参数和选项文件内容初始化。可以通过 SET GLOBAL 命令更改这些值。当一个新的连接线程被建立时,将以全局变量值初始化线程特定变量,直到你执行一个新的 SET GLOBAL 命令时,线程特定变量才会改变。
为了设置一个 全局(GLOBAL) 变量值,可以使用下面的任一句法:(在这里,我们以 sort_buffer_size 变量作为一个示例)
SET GLOBAL sort_buffer_size=value;
SET @@global.sort_buffer_size=value;
如果只是执行set character_set_client=gbk,只能改变当前会话的客户端字符集!
系统变量可分为两种类型:线程特定(Thread-specific)或称为连接特定(connection-specific)变量,它们是当前连接唯一的;全局变量,它们用于设置全局事件。全局变量也同样被用于设置一个新连接的相应线程特定变量的初始值。
当 mysqld 启动时,所有的全局变量以命令行参数和选项文件内容初始化。可以通过 SET GLOBAL 命令更改这些值。当一个新的连接线程被建立时,将以全局变量值初始化线程特定变量,直到你执行一个新的 SET GLOBAL 命令时,线程特定变量才会改变。
为了设置一个 全局(GLOBAL) 变量值,可以使用下面的任一句法:(在这里,我们以 sort_buffer_size 变量作为一个示例)
SET GLOBAL sort_buffer_size=value;
SET @@global.sort_buffer_size=value;
#10
谢谢loveflea(coolwind)回答.
刚才试着设了一下set GLOBAL character_set_client=gbk,发现在winMysqlAdmin中还是没有改变(其实因为现在character_set_client是gbk,我是在把它改成gb2312,控制台改后winMysqlAdmin关服务再开服务,发现character_set_client还是gbk,没变),但我相信正常情况就应该象你说的那样,用set GLOBAL来设.
因为要继续做下去,没有时间一直关注这个问题,就结贴了.
再次谢谢大家.
刚才试着设了一下set GLOBAL character_set_client=gbk,发现在winMysqlAdmin中还是没有改变(其实因为现在character_set_client是gbk,我是在把它改成gb2312,控制台改后winMysqlAdmin关服务再开服务,发现character_set_client还是gbk,没变),但我相信正常情况就应该象你说的那样,用set GLOBAL来设.
因为要继续做下去,没有时间一直关注这个问题,就结贴了.
再次谢谢大家.