博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL基础 - 编码设置
阅读量:5137 次
发布时间:2019-06-13

本文共 2141 字,大约阅读时间需要 7 分钟。

 

 

刚开始工作的时候,在工作中遇到的与数据库相关的问题,多半跟编码有关,总结一下数据库编码的设置。

字符集

查看数据库支持的字符集:

mysql> SHOW CHARACTER SET;

从图中可以看到数据库中可用的字符集以及每个字符集的描述和默认的校对。 校对:在一个字符集中对字符的比对规则。

查看所支持的校对的完整列表。

mysql> SHOW COLLATIONS;

从中可以看到,有的字符集不止一种校对,例如latin1对不同的欧洲语言有几种校对,而且许多校对出现两次,一次区分大小写(由_cs表示case sensitive),一次不区分大小写(由_ci表示case insensitive)。

通常系统管理在安装时定义一个默认的字符集和校对。此外,也可以在创建数据库时,指定默认的字符集和校对。为了确定所使用的字符集和校对,可以使用一下语句:

mysql> SHOW VARIABLES LIKE 'character%';mysql> SHOW VARIABLES LIKE 'collation%';

实际上,字符集很少是服务器范围(甚至是数据库范围)的设置,不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建表时指定。

为了给表指定字符集和校对,可使用带子句的CREATE TABLE:

CREATE TABLE user(    id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, username VARCHAR(10) ) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

除了能指定字符集和校对的表范围内,MySQL还允许对没个列设置它们,如下所示:

CREATE TABLE user (    id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, username VARCHA(10), about VARCHAR(100) CHARACTER SET latin2 COLLATE latin2_general_ci ) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

校对对用ORDER BY检索出来的数据排序时起非常重要的作用。如果需要用与创建表时不同的顺序排序特定的SELECT语句,可以在SELECT语句自身中进行:

SELECT * FROM customers ORDER BY lastname COLLATE latin1_general_cs;

编码设置

MySQL连接存在四种编码设置:

  1. 数据库服务端编码
  2. 数据库编码
  3. 客户端编码
  4. 连接编码

以上四个编码有一个不符合都有可能出现与预期不符合的结果。

查看编码情况:

mysql> status;

从上图中可以看到四个编码中数据库服务端编码和数据库编码都是latin1的编码,只有客户端和连接是使用的utf8,这也是默认的情况,MySQL安装之后若不做设置默认就是latin1编码,若有中文时定会造成很多困扰。下面就分步讲讲如何设置这几部分的编码。

  1. 设置数据库服务端编码: 主要涉及到配置文件的修改,即/etc/mysql/my.conf,也可以通过SET命令的方式修改。 在/etc/mysql/my.conf中找到[mysqld](若没有则手动添加,同理,若/etc/mysql/my.conf不存在,手动添加即可)加入以下配置信息:
[mysqld]character-set-server=utf8collation-server=utf8_general_ci

此处设置好保存之后记得重启MySQL,若是Debian系的,如Ubuntu:

icebug@localhost:~$ sudo /etc/init.d/mysql restart

若是RedHat系的如CentOS:

icebug@localhost:~$ sudo /etc/init.d/mysqld restart

icebug@localhost:~$ sudo systemctl restart mysqld

重新登陆MySQL使用status查看,若都为utf8即说明设置成功。

当然,这还只是设置了默认编码,即对于新建的库编码是没有问题的,对于已经建立的库怎么办?这就需要单独设置数据库的编码了。 ALTER DATABASE <database name> CHARACTER SET <character set>; EX:

mysql> ALTER DATABASE world CHARACTER SET utf8;mysql> ALTER DATABASE world COLLATE utf8_general_ci;

从设置MySQL字符集这个过程中又加深了对一个道理的理解,不管学习哪个新东西,官方文档都应该作为首要资料翻阅,这才是真正可靠的捷径。: )

此文转载!

官方文档传送门:

转载于:https://www.cnblogs.com/chun6/p/6209463.html

你可能感兴趣的文章
FIFO页面置换算法
查看>>
第三章寄存器(内存访问)
查看>>
HTTP导出和上传文件处理
查看>>
定时每天执行前一天的数据导入oracle
查看>>
IOS 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: URLString'
查看>>
我这个IOS渣渣又来写随笔了
查看>>
gdb 远程调试 android native 程序
查看>>
多线程常用方法
查看>>
ViewPager 放到ListView HeadView中不显示的问题
查看>>
Web知识简易介绍及HTTP知识总结
查看>>
Net学习日记_ASP.Net_MVC_HtmlHelper_笔记
查看>>
在 Core Data 中存取 transformable 类型的数据
查看>>
ORACLE 最后表数据更新的时间
查看>>
常见公文——决定和请示
查看>>
提高UI设计效率的4个技巧
查看>>
【程序1】
查看>>
docker学习
查看>>
ZOJ 2750 Idiomatic Phrases Game(Dijkstra)
查看>>
shell 逐行比较两个文件的内容是否一样(行数相同)
查看>>
Notepad++运行快捷键的设置
查看>>