MySQL基础 - 编码设置

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

字符集

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

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=utf8
collation-server=utf8_general_ci

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

[email protected]:~$ sudo /etc/init.d/mysql restart

若是RedHat系的如CentOS:

[email protected]:~$ sudo /etc/init.d/mysqld restart

[email protected]:~$ 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字符集这个过程中又加深了对一个道理的理解,不管学习哪个新东西,官方文档都应该作为首要资料翻阅,这才是真正可靠的捷径。: )

此文转载!

官方文档传送门:http://dev.mysql.com/doc/refman/5.7/en/charset.html

时间: 2024-08-23 03:44:09

MySQL基础 - 编码设置的相关文章

mysql utf8编码设置

1.建立数据库时指定数据库db_test为utf8编码.: create database db_test character set utf8;  修改数据库db_test编码的命令为: alter database db_test character set utf8: 2.检查现在的数据库编码设置. show variables like ‘%character%’; show variables like’%collation%’; 默认一般是latin1. 3.修改mysql编码 se

mysql字符编码设置

1.显示当前编码信息 mysql>show variables like '%character%' +--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | utf8 || character_set_connection |

mysql 字符编码设置

安装mysql时如果字符编码为默认值latin1,则需要修改为utf8以便支持中文数据. 命令如下: 1.显示数据库字符集 mysql> show create database test;+----------+-----------------------------------------------------------------+| Database | Create Database |+----------+-----------------------------------

mysql数据库编码设置成utf-8,避免出现乱码

设置默认编码为utf8:set names utf8;设置数据库db_name默认为utf8:ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;设置表tb_name默认编码为utf8:ALTER TABLE `tb_name`        DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

关于mysql字符编码设置

在mysql中插入数据一直显示是???乱码,网上很多人说的试了都不对,后来经过大量查询资料,将解决方案写在下面,不同的版本有不同的解决方案吧.我的数据库版本(5.5.40) [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] collation-server = utf8_unicode_ci init-connect='SET NAMES utf8′ character-set-serv

aws中RDS修改mysql的编码

由于创建rds时候,使用的是默认的字符集和程序的不太匹配,所以需要改成utf8的 1.查看mysql当前编码设置 2.在rds控制台 创建rds参数组 3.修改字符集 编辑参数组,找到 character-set开头的所有项,修改其配置为utf8 4.设置rds的参数组为刚才新建的参数组.重启rds 由于我这里创建rds是使用默认的参数组,如果要关联参数组需要对比下,看下有没有别的参数改动过,以确保rds不会出问题 参数比较 5.验证

[error handle]Linux下配置mysql的编码

mysql的默认编码是latin1,对汉字的支持不好,需要编辑配置文件,设置mysql的默认编码. 这个过程网上的教程很多,大家可以参考 mysql 修改编码格式 MySQL修改编码设置及乱码问题 linux下的mysql配置修改 途中碰到了好几个坑,真是恶心的不行. 坑1,找不到my.cnf文件 教程里说linux下mysql配置文件的路径在/etc/my.cnf,然而找不到. 百度了一下,说是有可能出现这种情况.囧,有经验的话还可以自己写一个.然而我没经验. 控制台下输入"find / -n

MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) (转)

MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明. MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以UTF-8为例来说明 需要注意的是,要修改的地方非常多,相应的修改方法也很多.下面是一种最简单最彻底的方法: 一.Windows系统下面 1.中止MySQL服务 2.在MySQL的安装目录下找到my.ini,如果

MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) - 转载

MySQL基础配置之mysql的默认字符编码的设置(my.ini设置字符编码) MySQL的默认编码是Latin1,不支持中文,那么如何修改MySQL的默认编码呢,下面以设置UTF-8为例来说明. 需要注意的是,要修改的地方非常多,相应的修改方法也很多.下面是一种最简单最彻底的方法: 一.Windows系统 1.中止MySQL服务 2.在MySQL的安装目录下找到my.ini,如果没有就把my-medium.ini复制为一个my.ini即可 3.打开my.ini以后,在[client]和[mys