使用过MySQL的朋友都知道有乱码问题困扰,而出现此问题都是因没有正确设置其编码造成;
假设现在要做一个简体中文网站;
一、设置数据库编码
安装mysql时可选择编码,如果已经安装过,可以更改文件my.ini(此文件在mysql的安装目录下)中的配制以达到目的;打开文件找到两处:
 [client]
[client]

 port=3306
port=3306

 [mysql]
[mysql]

 default-character-set=gb2312
default-character-set=gb2312
 # The default character set that will be used when a new schema or table is
# The default character set that will be used when a new schema or table is
 # created and no character set is defined
# created and no character set is defined
 default-character-set=gb2312
更改红色部分为gb2312
default-character-set=gb2312
更改红色部分为gb2312
此时新建数据库后,数据库目录下有个db.opt文件,内容如下:
 default-character-set=gb2312
default-character-set=gb2312
 default-collation=gb2312_chinese_ci
编码数据库一致
default-collation=gb2312_chinese_ci
编码数据库一致
二、客户端工具编码

编码设置与数据库
编码相同,可以用客户端工具直接写入数据,不产生乱码;
三、web.config中设置
连接字符串中的编码,MySQL Connector Net 5.0.3用
 <connectionStrings>
<connectionStrings>
 <add name="MySqlServer" connectionString="Data Source=127.0.0.1;User ID=root;Password=123;DataBase=BOOK;Charset=gb2312"/>
    <add name="MySqlServer" connectionString="Data Source=127.0.0.1;User ID=root;Password=123;DataBase=BOOK;Charset=gb2312"/>
 </connectionStrings>
读取写入的编码
  </connectionStrings>
读取写入的编码
 <globalization responseEncoding ="gb2312" requestEncoding ="gb2312"/>
<globalization responseEncoding ="gb2312" requestEncoding ="gb2312"/>
 public static CharacterSet GetChararcterSet(DBVersion version, string CharSetName)
public static CharacterSet GetChararcterSet(DBVersion version, string CharSetName)
 {
        {
 CharacterSet cs = (CharacterSet)mapping[CharSetName];
            CharacterSet cs = (CharacterSet)mapping[CharSetName];
 if (cs == null)
            if (cs == null)
 throw new MySqlException("Character set '" + CharSetName + "' is not supported");
                throw new MySqlException("Character set '" + CharSetName + "' is not supported");
 return cs;
            return cs;
 }
        }
 private static void LoadCharsetMap()
private static void LoadCharsetMap()
 {
{
 mapping.Add("latin1", new CharacterSet("latin1", 1));
   mapping.Add("latin1", new CharacterSet("latin1", 1));
 mapping.Add("big5", new CharacterSet("big5", 2));
            mapping.Add("big5", new CharacterSet("big5", 2));
 
   
 .
.
 }
}
假设现在要做一个简体中文网站;
一、设置数据库编码
安装mysql时可选择编码,如果已经安装过,可以更改文件my.ini(此文件在mysql的安装目录下)中的配制以达到目的;打开文件找到两处:
 [client]
[client]
 port=3306
port=3306
 [mysql]
[mysql]
 default-character-set=gb2312
default-character-set=gb2312 # The default character set that will be used when a new schema or table is
# The default character set that will be used when a new schema or table is # created and no character set is defined
# created and no character set is defined default-character-set=gb2312
default-character-set=gb2312此时新建数据库后,数据库目录下有个db.opt文件,内容如下:
 default-character-set=gb2312
default-character-set=gb2312 default-collation=gb2312_chinese_ci
default-collation=gb2312_chinese_ci二、客户端工具编码
编码设置与数据库
编码相同,可以用客户端工具直接写入数据,不产生乱码;
三、web.config中设置
连接字符串中的编码,MySQL Connector Net 5.0.3用
 <connectionStrings>
<connectionStrings> <add name="MySqlServer" connectionString="Data Source=127.0.0.1;User ID=root;Password=123;DataBase=BOOK;Charset=gb2312"/>
    <add name="MySqlServer" connectionString="Data Source=127.0.0.1;User ID=root;Password=123;DataBase=BOOK;Charset=gb2312"/> </connectionStrings>
  </connectionStrings> <globalization responseEncoding ="gb2312" requestEncoding ="gb2312"/>
<globalization responseEncoding ="gb2312" requestEncoding ="gb2312"/>
OK,此时设置完成,做好的网站即一个简体中文网站,不会有乱码的;
如果需要做一个繁体网站,把以上设置编码的地方变成"gbk"即可。
常见问题:
Character set 'gbk' is not supported
出现此问题,十有八九可能你用了底版本的MySQL Connector ,因为在MySQL Connector 1.07中提供的字符编码是有限的,找到不到web.config中设置的编码类型,没有gbk,不过好像有big5,具体请看MySQL Connector 1.07源码中的CharSetMap.cs文件,其中
 public static CharacterSet GetChararcterSet(DBVersion version, string CharSetName)
public static CharacterSet GetChararcterSet(DBVersion version, string CharSetName) {
        { CharacterSet cs = (CharacterSet)mapping[CharSetName];
            CharacterSet cs = (CharacterSet)mapping[CharSetName]; if (cs == null)
            if (cs == null) throw new MySqlException("Character set '" + CharSetName + "' is not supported");
                throw new MySqlException("Character set '" + CharSetName + "' is not supported"); return cs;
            return cs; }
        }
 private static void LoadCharsetMap()
private static void LoadCharsetMap() {
{ mapping.Add("latin1", new CharacterSet("latin1", 1));
   mapping.Add("latin1", new CharacterSet("latin1", 1)); mapping.Add("big5", new CharacterSet("big5", 2));
            mapping.Add("big5", new CharacterSet("big5", 2)); 
   
 .
. }
}而MySQL Connector 5.03中提供的字符编码相当全面了,所以建议使用5.03,不过5.03与旧版本的mysql数据库有些地方不太兼容。在执行存储过程等大的数据操作时会出现:
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding
分类: 数据库技术
 
                    
                     
                    
                 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号