SHOW CHARACTER SET;
Charset |Description |Default collation |Maxlen|
--------|-------------------------------|-------------------|------|
armscii8|ARMSCII-8 Armenian |armscii8_general_ci| 1|
ascii |US ASCII |ascii_general_ci | 1|
big5 |Big5 Traditional Chinese |big5_chinese_ci | 2|
...
utf32 |UTF-32 Unicode |utf32_general_ci | 4|
utf8 |UTF-8 Unicode |utf8_general_ci | 3|
utf8mb4 |UTF-8 Unicode |utf8mb4_0900_ai_ci | 4|
SHOW variables LIKE '%character%';
Variable_name |Value |
------------------------|------------------------------|
character_set_client |utf8mb4 |
character_set_connection|utf8mb4 |
character_set_database |utf8mb4 |
character_set_filesystem|binary |
character_set_results | |
character_set_server |utf8mb4 |
character_set_system |utf8 |
character_sets_dir |/usr/share/mysql-8.0/charsets/|
CREATE DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
ALTER DATABASE db_name
[[DEFAULT] CHARACTER SET charset_name]
[[DEFAULT] COLLATE collation_name]
SHOW CREATE DATABASE hrdb;
Database|Create Database |
--------|------------------------------------------------------------------------------------------------------------------------------|
hrdb |CREATE DATABASE `hrdb` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */|
SELECT default_character_set_name, default_collation_name
FROM information_schema.schemata
WHERE SCHEMA_NAME = 'hrdb';
DEFAULT_CHARACTER_SET_NAME|DEFAULT_COLLATION_NAME|
--------------------------|----------------------|
utf8mb4 |utf8mb4_0900_ai_ci |
CREATE TABLE table_name (column_list)
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]]
ALTER TABLE table_name
[[DEFAULT] CHARACTER SET charset_name]
[COLLATE collation_name]
SHOW CREATE TABLE employee;
Table |Create Table |
--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
employee|CREATE TABLE `employee` (
`emp_id` int NOT NULL,
`emp_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`sex` varchar(10) CHARACTER SET utf8 NOT NULL,
`dept_id` int NOT NULL,
`manager` int DEFAULT NULL,
`hire_date` date NOT NULL,
`job_id` int NOT NULL,
`salary` decimal(8,2) NOT NULL,
`bonus` decimal(8,2) DEFAULT NULL,
`email` varchar(100) CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`emp_id`),
UNIQUE KEY `uk_emp_email` (`email`),
KEY `idx_emp_name` (`emp_name`),
KEY `idx_emp_job` (`job_id`),
KEY `idx_emp_manager` (`manager`),
KEY `idx_emp_dept` (`dept_id`),
CONSTRAINT `fk_emp_dept` FOREIGN KEY (`dept_id`) REFERENCES `department` (`dept_id`),
CONSTRAINT `fk_emp_job` FOREIGN KEY (`job_id`) REFERENCES `job` (`job_id`),
CONSTRAINT `fk_emp_manager` FOREIGN KEY (`manager`) REFERENCES `employee` (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci|
SELECT table_collation
FROM information_schema.tables
WHERE table_name = 'employee';
TABLE_COLLATION |
------------------|
utf8mb4_0900_ai_ci|
col_name {CHAR | VARCHAR | TEXT} (col_length)
[CHARACTER SET charset_name]
[COLLATE collation_name]
col_name {ENUM | SET} (val_list)
[CHARACTER SET charset_name]
[COLLATE collation_name]
SELECT '数据库';
SELECT _utf8mb4'数据库';
SELECT _utf8mb4'数据库' COLLATE utf8mb4_0900_ai_ci;
SELECT length('abc'), char_length('abc'), length('数据库'), char_length('数据库');
length('abc')|char_length('abc')|length('数据库')|char_length('数据库')|
-------------|------------------|---------------|--------------------|
3| 3| 9| 3|
SELECT CONVERT('MySQL' USING ascii);
客户端语句使用的字符集,MySQL 使用 character_set_client 的设置作为客户端字符集;
服务器接收到语句之后需要将其转换为哪种字符集,MySQL 使用 character_set_connection 的值作为转换的目标字符集。同时它也是字符串常量默认的字符集;
服务器在返回查询结果(包括字段名、字段值、错误信息等)之前需要将其转换为哪种字符集,MySQL 使用 character_set_results 作为这种转换的目标字符集。
SET NAMES 'utf8';
SET SET CHARACTER SET 'utf8';
CHAR(10) CHARACTER SET utf8
NATIONAL CHARACTER(10)
NCHAR(10)
VARCHAR(10) CHARACTER SET utf8
NATIONAL VARCHAR(10)
NVARCHAR(10)
NCHAR VARCHAR(10)
NATIONAL CHARACTER VARYING(10)
NATIONAL CHAR VARYING(10)
SELECT N'数据库';
SELECT n'数据库';
SELECT _utf8'数据库';
Collation |Charset |Id |Default|Compiled|Sortlen|Pad_attribute|
--------------------------|--------|---|-------|--------|-------|-------------|
armscii8_bin |armscii8| 64| |Yes | 1|PAD SPACE |
armscii8_general_ci |armscii8| 32|Yes |Yes | 1|PAD SPACE |
ascii_bin |ascii | 65| |Yes | 1|PAD SPACE |
...
utf8mb4_hu_0900_ai_ci |utf8mb4 |274| |Yes | 0|NO PAD |
utf8mb4_hu_0900_as_cs |utf8mb4 |297| |Yes | 0|NO PAD |
utf8mb4_icelandic_ci |utf8mb4 |225| |Yes | 8|PAD SPACE |
SELECT 'a' = 'A';
'a' = 'A'|
---------|
1|
SELECT 'a' COLLATE utf8mb4_zh_0900_as_cs = 'A';
'a' COLLATE utf8mb4_zh_0900_as_cs = 'A'|
---------------------------------------|
0|
SHOW variables LIKE '%collation%';
Variable_name |Value |
-----------------------------|------------------|
collation_connection |utf8mb4_0900_ai_ci|
collation_database |utf8mb4_0900_ai_ci|
collation_server |utf8mb4_0900_ai_ci|
default_collation_for_utf8mb4|utf8mb4_0900_ai_ci|
SELECT emp_name
FROM employee
ORDER BY emp_name;
emp_name |
----------|
关兴 |
关平 |
关羽 |
刘备 |
周仓 |
孙丫鬟 |
孙乾 |
孙尚香 |
庞统 |
廖化 |
...
SELECT emp_name
FROM employee
ORDER BY emp_name collate 'utf8mb4_zh_0900_as_cs';
emp_name |
----------|
邓芝 |
法正 |
关平 |
关兴 |
关羽 |
黄权 |
黄忠 |
简雍 |
蒋琬 |
廖化 |
...
SELECT emp_name
FROM employee
ORDER BY convert(emp_name using gbk);
原文作者:SQL编程思想;如有侵权,请联系管理员删除。