如何让MySQL支持CJK编码
专注于为中小企业提供成都做网站、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业北川羌族免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
背景知识:
CJK:中日韩统一表意文字(CJK Unified Ideographs)(CJK不是苍井空老湿名字的缩写而是中日韩的缩写:China、Japan、Korea),目的是要把分别来自中文、日文、韩文、越文中,本质、意义相同、形状一样或稍异的表意文字(主要为汉字,但也有仿汉字如日本国字、韩国独有汉字、越南的喃字)于ISO 10646及Unicode标准内赋予相同编码。
一些比较复杂的异性字,比如:古书中出现的一些生僻字等就包括在这个字符集中。
正在做的一个项目是关于历史古籍的,数据中大量出现这种字,所以研究了一下如何让MySQL支持这种CJK,经验记录如下:
1 MySQL从5.5.3开始支持utf8mb4编码,这种编码用4个字节表示一个字,所以容量更大,MySQL5.5.3之前的版本就甭尝试了,不是乱码就是问号(MySQL的官方说明如下:)。(通过编译方式升级MySQL的方法,目前也只能自己编译MySQL,因为yum软件库中最新的MySQL仍是5.1.x)
2 建表时为字段指定字符集:
`title` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL,
上面就是一个例子:一个长度为100的varchar的title字段,字符集是utf8mb4。
3 程序(PHP等)在建立链接时需要指定字符集
mysql_query("SET NAMES 'utf8mb4'", $connect);
将my.ini文件中的默认字符集改为gb2312即可
具体的办法是修改其中的[mysqld] 里添加一行: default-character-set=gb2312
然后重启服务,不过只对修改后的数据有效,对修改前已经在数据库中的数据是没有效果的.
如果是临时更改的话,在命令行输入下面信息即可:
SET character_set_client = gb2312;
SET character_set_connection = gb2312;
SET character_set_database = gb2312;
SET character_set_results = gb2312;
SET character_set_server = gb2312;
默认情况下,版本从4.*至5.*(最新是5.7)都是支持INNODB数据引擎的,不需要特别的开启。特别是在5.5版本以后,默认就是InnoDB。MyISAM可能会慢慢地更少地使用。
要特别设置InnoDB为默认引擎,需要在 /etc/my.cnf 文件中的 [mysqld] 下面加入default-storage-engine=INNODB 一句,保存。重启MySQL,就可以看到引擎的相关信息,例如我的显示如下:
mysql show engines;
+--------------------+---------+
| Engine | Support |
+--------------------+---------+
| PERFORMANCE_SCHEMA | YES |
| MRG_MYISAM | YES |
| CSV | YES |
| BLACKHOLE | YES |
| MyISAM | YES |
| InnoDB | DEFAULT |
| ARCHIVE | YES |
| MEMORY | YES |
| FEDERATED | NO |
+--------------------+---------+
其中InnoDB为 DEFAULT 即为默认引擎。
如果要修改表引擎为 innodb,可以用以下命令:
mysql alter table 表名 engine = innodb;