MySQL字符集简介

MySQL字符集简介:

  字符集是很重要的内容,由于开发人员对字符集的不重视,有可能导致软件后期有这样或那样的问题产生;
 
  在MySQL数据库中,默认的字符集是latin1,对于国外的以英语为母语的人来说,这个字符集一般不会出现太多问题,但对于中文而言,就有太多的问题;
 
  通过SHOW CHARSET可以查看MySQL支持的字符集,MySQL5.5这个版本是39个字符集;
 
  对于简体中文,我们一般用gbk或gb2312,二者的区别是:gbk是gb2312的超集,因此可以支持更多的汉字;但由于MySQL5.5不支持gb18030,因此在有些应用中已经出现gbk不能显示特定中文字体的情况了;而对于繁体中文,big5可能是首选;
 
  对于Unicode和utf8:
    Unicode是一种在计算机上使用的字符编码,它为每种语言中的每个字符设定了统一且唯一的二进制编码,需要注意的是,Unicode是字符编码,不是字符集。
    Unicode是国际组织指定的可以容纳世界上所有文字和符号的字符编码方案,用数字0到0x10FFFF来映射这些字符,即最多可以容纳1114112个字符。
    我们可以通过一下SQL语句来查询MySQL支持的Unicode编码的字符集;
 

mysql> USE information_schema;
Database changed
mysql> SELECT * FROM CHARACTER_SETS
    -> WHERE DESCRIPTION like '%Unicode';
+--------------------+----------------------+----------------+--------+
| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION    | MAXLEN |
+--------------------+----------------------+----------------+--------+
| utf8               | utf8_general_ci      | UTF-8 Unicode  |      3 |
| ucs2               | ucs2_general_ci      | UCS-2 Unicode  |      2 |
| utf8mb4            | utf8mb4_general_ci   | UTF-8 Unicode  |      4 |
| utf16              | utf16_general_ci     | UTF-16 Unicode |      4 |
| utf32              | utf32_general_ci     | UTF-32 Unicode |      4 |
+--------------------+----------------------+----------------+--------+
5 rows in set (0.00 sec)


MySQL5.5数据库共支持5种Unicode编码,utf8被视为utf8mb3,即最大占用3个字节空间,而utf8mb4可以视做utf8mb3的扩展,对BMP(Basic Multilingual Plane)字符的存储,utf8mb3和utf8mb4两者是完全一样的,区别只是utf8mb4对扩展字符的支持;
 
    要查看当前使用的字符集,可以使用STATUS命令:

mysql> STATUS;
--------------
mysql  Ver 14.14 Distrib 5.5.35, for Win32 (x86)

Connection id:          1
Current database:       information_schema
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server version:         5.5.35 MySQL Community Server (GPL)
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    gbk
Db     characterset:    utf8
Client characterset:    gbk
Conn.  characterset:    gbk
TCP port:               3306
Uptime:                 57 min 1 sec

Threads: 4  Questions: 61  Slow queries: 0  Opens: 37  Flush tables: 1  Open tab
les: 0  Queries per second avg: 0.017
--------------


   命令 SET NAMES 可以用来更改当前会话连接的字符集、当前会话的客户端的字符集以及当前会话返回结果集的字符集;

mysql> SET NAMES 'gbk';


   MySQL数据库另一个比较厉害的地方是,可以细化每个对象字符集的设置,如:

mysql> CREATE TABLE t (
    -> a VARCHAR(10) CHARSET gbk,
    -> b VARCHAR(10) CHARSET latin1,
    -> c VARCHAR(10)
    -> ) CHARSET=utf8;
Query OK, 0 rows affected (0.09 sec)


      注:SQL标准支持NCHAR类型(National Character Set),在MySQL5.5数据库中用utf8来表示这种类型,如:

mysql> CREATE TABLE t (
    -> a NCHAR(10)
    -> ) CHARSET=gbk;
Query OK, 0 rows affected (0.06 sec)

mysql> SHOW CREATE TABLE t\G;
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `a` char(10) CHARACTER SET utf8 DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)


  我们在客户端可以使用N前缀将字符串指定为NCHAR类型,也就是UTF-8,如:
 

SELECT N'小明';


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值