mysql 选择字符集 拉丁字符集_mysql的字符集

mysql 字符集介绍

2017-09-30-09:16:57

个人原创,转载请注明,否则追究法律责任

原理:mysql -uroot -p

所以当涉及到,插入的字符集里有中文时,一定要现在定义:set names gbk;

字符集:mysql用来存储字符串的方式。(包含字符集和校队规则)

默认字符集:拉丁字符集

GBK 定长,双字节,不是国际标准,支持的系统不少

UTF-8 非定长,1-4字节,广泛支持,mysql也使用UTF-8

latin1 mysql的默认字符集

字符集的选择:

1,如处理各种文字,发布到不同语言的国家(处理英文),应选Unicode,对应的mysql就是UTF-8,每个汉字三字节,

如果应用需要处理英文,仅少量汉字,UTF-8 更好

2,如需支持中文,数据量大,性能要求高,可选GBK(每个汉字双字节,英文也是双字节)

实际中:2/3使用UTF-8,1/1使用GBK,mysql可以支持多种字符集,

同一台机器,库,表的不同字段都可以指定不同的字符集。建库的字符集应给和建表的字符集应该一样。应该和mysql客户端的字符集,甚至操作系统的字符集全统一,这样就正常。否则可能会出错。

修改后的字符集变量:

mysql>show variables like 'character_set%';

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

| Variable_name | Value |

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

| character_set_client | gbk |

| character_set_connection | gbk |

| character_set_database | latin1 |

| character_set_filesystem | binary |

| character_set_results | gbk |

| character_set_server | latin1 |

| character_set_system | utf8 |

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

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

8 rows in set (0.00 sec)

查看表的字符集:

mysql>show create table cc;

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

| Table | Create Table |

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

| cc | CREATE TABLE `cc` (

`name` char(20) DEFAULT NULL

) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

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

1 row in set (0.00 sec)

建一个gbk字符集的表:

mysql>create table dd(id int,name char(20)) default charset=gbk;

Query OK, 0 rows affected (0.01 sec)

mysql> set names gbk;

Query OK, 0 rows affected (0.00 sec)

mysql>insert into dd values(1,'abc'),(2,'性能要求高'),(3,'如需支持中文');

Query OK, 3 rows affected, 1 warning (0.00 sec)

Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from dd;

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

| id | name |

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

| 1 | abc |

| 2 | 性能要求?? |

| 3 | 如需支持中文 |

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

3 rows in set (0.00 sec)

注意:库和表的字符集要统一,要么都是utf8或者都是gbk。一般都用utf8.

另外的方法:在/etc/my.cnf 里添加参数:

位置为[mysqld]的下面

default-character-set=gbk

service mysqld restart 重启服务。

能够修改:character_set_server和character_set_database这两个的字符集

而set names gbk;可以修个上面两个,再加上:客户端和连接。

生产环境的字符集设置:

你的程序用什么字符集,则你的数据库就用什么字符集,你的表就用什么字符集,否则就会有乱码

生产环境中常用的字符集有gbk 和utf8

比如:用在博客和CMS等产品的数据库授权

mysql> create databse blog default character set gbk collate gbk_chinese_ci;

mysql> insert into c3 values(1,'的备份与恢'); -------插入时没问题,

Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from c3; --------------------------查看时会报乱码

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

| id | name |

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

| 1 | afdasf |

| 1 | 的备份? | ------------------------------出现乱码

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

2 rows in set (0.00 sec)

设置字符集后在插入数据

mysql>set names gbk; ------------------------------------ 这时固定格式:set names gbk;names是mysql的变量,不能改成其他的

Query OK, 0 rows affected (0.00 sec)

mysql>insert into t1 values(1,'abc'),(2,'生产环境');

Query OK, 2 rows affected (0.00 sec)

Records: 2 Duplicates: 0 Warnings: 0

mysql>select * from t1;

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

| id | name |

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

| 1 | abc |

| 2 | 生产环境 | -------------------------------------- 这里就可以了,可以显示中文了

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

2 rows in set (0.00 sec)

注意:set names gbk;只能是在gbk的数据库里生效。在默认创建的拉丁的字符集的数据库里,这样设置无效。仍然识别不了中文

mysql> show create database chen;

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

| Database | Create Database |

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

| chen | CREATE DATABASE `chen` /*!40100 DEFAULT CHARACTER SET latin1 */ |

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

1 row in set (0.00 sec)

mysql> set names gbk;

Query OK, 0 rows affected (0.00 sec)

mysql> insert into cc values('abc'),('数据库就用'),('什么字符集');

Query OK, 3 rows affected, 2 warnings (0.00 sec)

Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from cc;

+---------+

| name |

+---------+

| abc |

| ??????? |

| ??????? |

+---------+

总结:往数据库里插入数据时,必需是先set names gbk;然后再插入,否则,插入的是乱码。插入时成功的,但显示不出来。没用。

编辑sql语句。在第二行添加:set names gbk;

导入外部文本到数据库中:

1,该文本的字符集要正确:gb2312

2, 文件里要加入:set names gbk;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值