我在mysql的命令行insert一条记录里面包含中文,我给中文那个字段定义的长度是50,我实际添加的只有两个汉字 
他还会超出长度范围 
但是换成字符就可以了 
为什么? 
怎么解决呢?

解决方案 »

  1.   

    set name 'gbk'先设置一个字符集。[align=center]====  ====
    [/align]
      

  2.   

    MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以UTF-8为例来说明
    需要注意的是,要修改的地方非常多,相应的修改方法也很多。下面是一种最简单最彻底的方法:
    一、Windows
    1、中止MySQL服务
    2、在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini即可
    3、打开my.ini以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭
    4、启动MySQL服务
    二、Linux
    1、中止MySQL服务(bin/mysqladmin -u root shutdown)
    2、在/etc/下找到my.cnf,如果没有就把MySQL的安装目录下的support-files目录下的my-medium.cnf复制到/etc/下并改名为my.cnf即可
    3、打开my.cnf以后,在[client]和[mysqld]下面均加上default-character-set=utf8,保存并关闭
    4、启动MySQL服务(bin/mysqld_safe &)
    非常简单,这样的修改一劳永逸,今后MySQL一切相关的默认编码均为UTF-8了,创建新表格的时候无需再次设置
    需要注意的是,当前数据库中已经存在的数据仍保留现有的编码方式,因此需要自行转码,方法在网上有很多,不再赘述。
     
    查看数据库字符集的若干命令:
     show variables like 'character\_set\_%';
     SHOW VARIABLES LIKE 'collation_%';
    好像命令行运行的MySQL命令不支持UTF8,插入后好像什么都没有,所以
    插入数据时可以执行 set names gbk;
    之后 set names utf8;
    或者使用交互工具插入。
     
     
    mysql> use sofa
    Database changed
    mysql> select * from test;
    +------+--------+
    | id   | name   |
    +------+--------+
    |    2 | 娴嬭瘯   |
    |    1 | 娴嬭瘯   |
    +------+--------+
    2 rows in set (0.00 sec)
     
    mysql> set names gbk;
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> select * from test;
    +------+------+
    | id   | name |
    +------+------+
    |    2 | 测试     |
    |    1 | 测试     |
    +------+------+
    2 rows in set (0.00 sec)
     
    mysql> show create table test;
    +-------+---------------------------------------------------
    ------------+
    | Table | Create Table
                |
    +-------+---------------------------------------------------
    ------------+
    | test  | CREATE TABLE `test` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(10) DEFAULT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
    +-------+---------------------------------------------------
    ------------+
    1 row in set (0.17 sec)
     
    mysql> insert into test value(3,'明天')
        -> ;
    Query OK, 1 row affected (0.14 sec)
     
    mysql> select * from test;
    +------+------+
    | id   | name |
    +------+------+
    |    3 | 明天     |
    |    2 | 测试     |
    |    1 | 测试     |
    +------+------+
    3 rows in set (0.08 sec)