首先,字符集的问题:



mysql> show variables like 'character%';

+--------------------------+----------------------------+

| Variable_name            | Value                      |

+--------------------------+----------------------------+

| character_set_client     | latin1                     | 

| character_set_connection | latin1                     | 

| character_set_database   | latin1                     | 

| character_set_filesystem | binary                     | 

| character_set_results    | latin1                     | 

| character_set_server     | latin1                     | 

| character_set_system     | utf8                       | 

| character_sets_dir       | /usr/share/mysql/charsets/ | 

+--------------------------+----------------------------+

8 rows in set (0.00 sec)

mysql>

mysql的字符集分为几类

A.客户端字符集:通过系统变量”character_set_client“表示,通知server端,客户端提交的sql语句编码格式

B.连接字符集:通过系统变量”character_set_connectiont“表示,server端翻译sql语句时,使用的编码格式

C.结果集字符集:通过系统变量”character_set_results“表示,server端返回结果集之前把结果集转换成的编码格式

D.存储字符集:通过系统变量”character_set_results“和“character_set_server”表示,是数据在存储引擎里编码格式

 

为了不出现乱码,我们需要统一修改这些参数,比如我要把数据库的默认字符集改为utf8,如下所示

在[client]下添加如下参数

default-character-set=utf8

在[mysqld]下添加如下参数

default-character-set=utf8

然后重启mysql服务,再查看字符集(要重新登录客户端)

mysql> show variables like 'character%';

+--------------------------+----------------------------+

| 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.01 sec)



这条水平线 上面 的内容是指导我如何修改phpnow中mysql的编码格式的,事实证明没有什么卵用,能改掉其中character_set_server和character_set_database两项。

在mysql里运行set names ''
虽然机子是utf8,但是mysql必须是GBK


这个只是个命令,我用了,但是没有卵用。

当MySQL数据库为GBK编号,.net程序使用默认编码(UTF-8),向mysql中插入数据容易产生乱码。解决办法是在连接字符串加入Charset=gbk:

MySqlConnection myConnection = new MySqlConnection("Database=test2;Data Source=localhost;User Id=root;Password=ikmbikmb;Charset=gbk");

这个最起码的还靠点儿谱。

最后记下解决方案,首先,改掉vs中数据库连接字符串的编码格式。



<add key="local" value="Server=localhost;Database=football;Uid=root;Pwd=root;Charset=gb2312;" />


然后,用navicat修改数据库的字符集格式。

关于今天mysql数据库的一系列问题_编码格式

再然后,修改数据库表的字符集格式。

关于今天mysql数据库的一系列问题_sql语句_02

关于今天mysql数据库的一系列问题_客户端_03

这里要注意,数据库连接属性里的不要改。

关于今天mysql数据库的一系列问题_编码格式_04

至此,编码格式的问题算是解决了,可是我发现传过来的字符串不全,比如说四个字的值只传过来前两个字,后来发现是.net中MySqlParameter参数设置的问题。

于是,我增加了一个方法:



public void AddParameter(string key, object value, object dbtype, int size)
{
if (prms == null)
{
prms = new List<MySqlParameter>();
}
MySqlParameter mp = new MySqlParameter(key, value);
mp.MySqlDbType = (MySqlDbType)dbtype;
mp.Size = size;
prms.Add(mp);
}


使用的时候要注意,如果不设置的话,MySqlDbType默认是BLOB



vDBManager.AddParameter("@" + key, jd_home[key], MySqlDbType.VarChar, 50);


字符型的最好是这样传入,这样传入就没有问题了,当然经过测试,数字型的这样传入也没有问题。所以,可以将这个类型设为默认值,有特殊的再特殊处理。