9.2 第九章 字符集

9.6 MySQL 字符集的设置

MySQL 的字符集和校对规则有4 个级别的默认设置:服务器级、数据库级、表级和字
段级。它们分别在不同的地方设置,作用也不相同。

  说明:什么是校对规则? 例如:GBK 的校对规则,其中gbk_chinese_ci 是默认的校对规则,大小写不敏感的,gbk_bin 按照编码的值进行比较,是大小写敏感的。

如何查看字符集和校对规则

  1. 服务器级:【查看字符集】show variables like ‘character_set_server‘;    【查看校对规则】show variables like ‘collation_server‘;
  2. 数据库级:【查看字符集】show variables like ‘character_set_database ‘ 【查看校对规则】show variables like ‘ collation_database ‘
  3. 表级:【查看字符集】【查看校对规则】 show create table 表名;
  4. 字段级:【查看字符集】【查看校对规则】 show full columns from 表名;

9.7 字符集的修改步骤

如果在应用开始阶段没有正确的设置字符集,在运行一段时间以后才发现存在不能满足要求
需要调整,又不想丢弃这段时间的数据,那么就需要进行字符集的修改。字符集的修改不能
直接通过“alter database character set ***”或者“alter table tablename character set ***”命
令进行,这两个命令都没有更新已有记录的字符集,而只是对新创建的表或者记录生效。已
有记录的字符集调整,需要先将数据导出,经过适当的调整重新导入后才可完成。

以下模拟的是将latin1 字符集的数据库修改成GBK 字符集的数据库的过程。
(1)导出表结构:
mysqldump -uroot -p --default-character-set=gbk -d databasename> createtab.sql
Linux公社 www.linuxidc.com
139
其中--default-character-set=gbk 表示设置以什么字符集连接,-d 表示只导出表结构,
不导出数据。

(2)手工修改createtab.sql 中表结构定义中的字符集为新的字符集。

(3)确保记录不再更新,导出所有记录。
mysqldump -uroot -p --quick --no-create-info --extended-insert
--default-character-set=latin1 databasename> data.sql

? --quick:该选项用于转储大的表。它强制mysqldump 从服务器一次一行地检索表中
的行而不是检索所有行,并在输出前将它缓存到内存中。
? --extended-insert:使用包括几个VALUES 列表的多行INSERT 语法。这样使转储文件
更小,重载文件时可以加速插入。
? --no-create-info:不写重新创建每个转储表的CREATE TABLE 语句。
? --default-character-set=latin1:按照原有的字符集导出所有数据,这样导出的文件中,
所有中文都是可见的,不会保存成乱码。

(4)打开data.sql,将SET NAMES latin1 修改成SET NAMES gbk。

(5)使用新的字符集创建新的数据库。

create database databasename default charset gbk;

(6)创建表,执行createtab.sql。
mysql -uroot -p databasename < createtab.sql

(7)导入数据,执行data.sql。
mysql -uroot -p databasename < data.sql

注意:选择目标字符集的时候,要注意最好是源字符集的超级,或者确定比源字符集的字库更
大,否则如果目标字符集的字库小于源字符集的字库,那么目标字符集中不支持的字符
倒入后会变成乱码,丢失一部分数据。例如,GBK 字符集的字库大于GB2312 字符集,
那么GBK 字符集的数据,如果导入GB2312 数据库中,就会丢失GB2312 中不支持的那
部分汉字的数据。



时间:2017-03-31 11:41:00

时间: 2024-11-05 00:05:43

9.2 第九章 字符集的相关文章

9.1 第九章 字符集

9.1 -9.3 字符集概述 这里着重介绍utf-8和gbk: utf-8: UTF-8按一定规则将一个ISO-10646或Unicode字元码转换成1至4个字节的编码, 其中将ASCII码(0-0x7F)转换成单字节编码,也就是严格兼容ASCII字符集: UTF-8的2字节编码,用以转换ISO-10646标准0x0080-0x07FF的UCS-4原始码: UTF-8的3字节编码,用以转换ISO-10646标准 0x0800-0xFFFF的UCS-4原始码: UTF-8的4字节编码,用以转换IS

《深入浅出Mysql》——第九章 字符集 + 第十章 索引的设计和使用 + 第十一章 视图

MyISAM 和 InnoDB 存储引擎的表默认创建的都是 BTREE 索引.默认情况下,MEMORY 存储引擎使用 HASH 索引,但也支持 BTREE 索引. 原文地址:https://www.cnblogs.com/JasonPeng1/p/12234413.html

第九章: 输入与输出

@font-face{ font-family:"Times New Roman"; } @font-face{ font-family:"宋体"; } @font-face{ font-family:"Arial"; } @font-face{ font-family:"黑体"; } @font-face{ font-family:"微软雅黑"; } p.MsoNormal{ mso-style-name

javascript高级程序设计 第九章-- 客户端检测

javascript高级程序设计 第九章-- 客户端检测 客户端检测是javascript开发中最具争议的一个话题,由于浏览器间存在差别,通常需要根据不同浏览器的能力分别编写不同的代码.有下列常使用的客户端检测方法:能力检测:在编写代码之前先检测特定浏览器的能力.例如,脚本在调用某个函数之前,可能要先检测该函数是否存在.这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上.能力检测无法精确地检测特定的浏览器和版本.怪癖检测:怪癖实际上是浏览器中存

zabbix专题:第九章 自定义key(案例:监控内存,监控nginx状态)

第九章 自定义key 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 为什么要自定义KEY 有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法.我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter. 语法如下: UserParameter=key,command 用户自定义参数包含一个key和一个命令,ke

读书笔记第九章

第九章HAL是建立在linux驱动之上的一套程序库.这套程序库并不属于linux内核,而是属于linux内核层之上的应用层.可以用来保护不想公开源代码的作者.HAL架构比较简单,其基本原理就是在安卓系统中使用程序库调用位于内核空间的linux驱动,然后安卓应用程序可以通过NDK程序访问HAL中的程序库,或直接在安卓应用程序中访问HAL中的程序库.编写一款支持HAL的linux驱动程序的步骤:1.编写linux驱动,linux驱动的代码要尽量简介,尽可能将业务逻辑放到HAL library中.2.

第九章 两种模式的比较

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include

第九章 用多线程来读取epoll模型下的客户端数据

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include

第九章 TCP和UDP同时用复用一个端口实现一个回射服务器

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include <string.h> #include