zoukankan      html  css  js  c++  java
  • 关于今天mysql数据库的一系列问题

    首先,字符集的问题:


    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修改数据库的字符集格式。

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

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

    至此,编码格式的问题算是解决了,可是我发现传过来的字符串不全,比如说四个字的值只传过来前两个字,后来发现是.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);

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

  • 相关阅读:
    28335外部中断的简单介绍和配置
    C++中强制类型转换
    GitHub上Markdown语法的高级应用
    C++中强制类型转换
    模拟鼠标点击事件
    clone一行div tr 每次增量赋值
    linux tomcat自动部署shell
    maven 引用本地jar
    JDK自带工具keytool生成ssl证书
    jenkins+maven+svn实现简单的一键发布
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/5640638.html
Copyright © 2011-2022 走看看