MySQL中的character set和collation
character set和collation的是什么
character set即字符集
我们常看到的UTF-8、GB2312、GB18030都是相互独立的character set。即对Unicode的一套编码。
collation即比对方法
用于指定数据集如何排序,以及字符串的比对规则。
每个character set会对应一定数量的collation。查看方法是在MySQL的Console下输入:
MariaDB [mxshop]> show collation like 'utf8%';
+--------------------------+---------+-----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +--------------------------+---------+-----+---------+----------+---------+ | utf8_general_ci | utf8 | 33 | Yes | Yes | 1 | | utf8_bin | utf8 | 83 | | Yes | 1 | | utf8_unicode_ci | utf8 | 192 | | Yes | 8 | | utf8_icelandic_ci | utf8 | 193 | | Yes | 8 | | utf8_latvian_ci | utf8 | 194 | | Yes | 8 | 。。。 。。。 +--------------------------+---------+-----+---------+----------+---------+ 47 rows in set (0.00 sec)
查看全局字符集
MariaDB [mxshop]> show variables like '%character%';
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
8 rows in set (0.00 sec)
MariaDB [mxshop]> show variables like 'collation%';
+----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8_general_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+
查看数据库字符集
MariaDB [mxshop]> show create database mydb2;
+----------+----------------------------------------------------------------+ | Database | Create Database | +----------+----------------------------------------------------------------+ | mydb2 | CREATE DATABASE `mydb2` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+----------------------------------------------------------------+
设置字符集
创建时设置
MariaDB [mxshop]> create database mydb3 CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Query OK, 1 row affected (0.00 sec)
MariaDB [mxshop]> show create database mydb3;
+----------+----------------------------------------------------------------------------------------+ | Database | Create Database | +----------+----------------------------------------------------------------------------------------+ | mydb3 | CREATE DATABASE `mydb3` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ | +----------+----------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
创建后设置
MariaDB [mxshop]> ALTER DATABASE mydb2 CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Query OK, 1 row affected (0.01 sec)
MariaDB [mxshop]> show create database mydb2;
+----------+---------------------------------------------------------------------------- ------------+ | Database | Create Database | +----------+---------------------------------------------------------------------------- ------------+ | mydb2 | CREATE DATABASE `mydb2` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_un icode_ci */ | +----------+---------------------------------------------------------------------------- ------------+ 1 row in set (0.00 sec)
查看数据表字符集
MariaDB [mxshop]> show create table users_userprofile;
+-------------------+----------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ---------------------------+ | Table | Create Table | +-------------------+----------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ---------------------------+ | users_userprofile | CREATE TABLE `users_userprofile` ( `id` int(11) NOT NULL AUTO_INCREMENT, `password` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `last_login` datetime DEFAULT NULL, `is_superuser` tinyint(1) NOT NULL, `username` varchar(150) COLLATE utf8_unicode_ci NOT NULL, `first_name` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar(30) COLLATE utf8_unicode_ci NOT NULL, `is_staff` tinyint(1) NOT NULL, `is_active` tinyint(1) NOT NULL, `date_joined` datetime NOT NULL, `name` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL, `birthday` date DEFAULT NULL, `gender` varchar(6) COLLATE utf8_unicode_ci NOT NULL, `mobile` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL, `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci | +-------------------+----------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ---------------------------+ 1 row in set (0.00 sec)
参考文档:https://www.cnblogs.com/yangmingxianshen/p/7999428.html