æ¬æå ³é®åï¼å符éã建åºå»ºè¡¨
ä¸ãæ°æ®åºåå符é1. 建åºæ¶æå®å建æ°æ®åºæ¶ï¼æ¾å¼æå®å符éåæåºè§åï¼åæ¶ï¼å½åæ¢å°å½åæ°æ®åºåï¼åæ° character_set_databaseï¼collation_database åå«è¢«è¦ç为å½åæ¾å¼æå®çå符éåæåºè§åã举个ç®åä¾åï¼å建æ°æ®åº ytt_new2ï¼æ¾å¼æå®å符é为 latin1ï¼åæ¶æåºè§å为 latin1_binãä¹åå¨åæ¢å°æ°æ®åº ytt_new2 åï¼å¯¹åºçç³»ç»åæ°ä¹è¢«ä¿®æ¹ãmysql> create database ytt_new2 default character set latin1 collate latin1_bin;Query OK, 1 row affected (0.03 sec)mysql> use ytt_new2Database changedmysql> select @@character_set_database,  @@collation_database;+--------------------------+----------------------+| @@character_set_database | @@collation_database |+--------------------------+----------------------+| latin1                   | latin1_bin           |+--------------------------+----------------------+1 row in set (0.00 sec)2. æ¹åºæ¶æå®æ¹åºç±»ä¼¼å»ºåºï¼ææä¸æ ·ãä½éè¦æ³¨æçä¸ç¹æ¯ï¼ä¿®æ¹åºå符éä¸æåºè§ååï¼ä¹ååºäºè¿ä¸ªåºå建çåç§å¯¹è±¡ï¼è¿æ¯æ²¿ç¨èçå符éä¸æåºè§åã
举个ä¾åï¼å¯¹åå¨è¿ç¨çå½±åï¼
-- ç®åå个åå¨è¿ç¨DELIMITER $$USE `ytt_new2`$$DROP PROCEDURE IF EXISTS `sp_demo`$$CREATE DEFINER=`root`@`%` PROCEDURE `sp_demo`(IN f1 VARCHAR(10),IN f2 VARCHAR(10))BEGINDECLARE v1 VARCHAR(20);SET v1 = CONCAT(f1,f2);SELECT v1 AS result;END$$DELIMITER ;æ¥çè¿ä¸ªåå¨è¿ç¨çå符éï¼è¿éçå°æåºè§åæ¯ latin1_binï¼å¯¹åºçå符éæ¯ latin1ï¼åæ°æ®åº ytt_new2 ä¸è´ãmysql> show create procedure sp_demo\G*************************** 1. row ***************************Procedure: sp_demo...Database Collation: latin1_bin1 row in set (0.00 sec)-- é£æ¥ä¸æ¥æ¹ææ°æ®åºçå符é为 UTF8mysql> alter database ytt_new2 character set utf8 collate utf8_general_ci;Query OK, 1 row affected, 2 warning (0.02 sec)mysql> select @@character_set_database,  @@collation_database;+--------------------------+----------------------+| @@character_set_database | @@collation_database |+--------------------------+----------------------+| utf8                     | utf8_general_ci      |+--------------------------+----------------------+1 row in set (0.00 sec)-- åæ¥çåå¨è¿ç¨Â sp_demo çå符éï¼è¿æ¯ä¹åçãmysql> show create procedure sp_demo\G*************************** 1. row ***************************Procedure: sp_demo...Database Collation: latin1_bin1 row in set (0.00 sec)-- æ¤æ¶ï¼è°ç¨åå¨è¿ç¨ï¼å符éä¸å¯¹ï¼æ¥ç¼ç é误ãmysql> call sp_demo('æ','ä½ ');ERROR 1366 (HY000): Incorrect string value: '\xE6\x88\x91' for column 'f1' at row 1-- æ¹ååå¨è¿ç¨å符éåªè½å é¤é建ï¼éæ°æ§è¡ä¸ä¹åçåå¨è¿ç¨ä»£ç ï¼å次è°ç¨ï¼ç»æå°±æ£å¸¸äºãmysql> call sp_demo('æ','ä½ ');+--------+| result |+--------+| æä½ Â Â Â |+--------+1 row in set (0.00 sec)Query OK, 0 rows affected, 2 warnings (0.01 sec)
3. åæ°çæå®
åæ° character_set_database å collation_database å¦æ没ææå®ï¼é»è®¤ç»§æ¿æå¡å¨ç«¯å¯¹åºåæ° character_set_server å collation_serverãmysql> select @@character_set_server charset,  @@collation_server collation    -> union all    -> select @@character_set_database,  @@collation_database;+---------+--------------------+| charset | collation          |+---------+--------------------+| utf8mb4 | utf8mb4_0900_ai_ci || utf8mb4 | utf8mb4_0900_ai_ci |+---------+--------------------+2 rows in set (0.00 sec)é£è¿ç§æ åµä¸ï¼å»ºåºæè æ¹åºæ¶ä¸æå®å ·ä½çå符éåæåºè§åï¼é»è®¤ç»§æ¿è¿ä¸¤ä¸ªåæ°ï¼mysql> show create database ytt_new3\G*************************** 1. row ***************************       Database: ytt_new3Create Database: CREATE DATABASE `ytt_new3`  1 row in set (0.00 sec)
äºã表åå符é1. 建表æ¶æå®(æ¾å¼è®¾ç½®)å建åºä¸æ ·ï¼æ¾å¼æå®å符éåæåºè§åï¼ä¼å 级æé«ï¼ä»¥æå®çå¼ä¸ºåã-- å建æ°åºÂ ytt_new4mysql> create database ytt_new4;Query OK, 1 row affected (0.02 sec)mysql> use ytt_new4;Database changed-- å建æ°è¡¨Â t1, å符é latin1, æåºè§å latin1_binmysql> create table t1(a1 int) charset latin1 collate latin1_bin;Query OK, 0 rows affected (0.05 sec)mysql> show create table t1\G*************************** 1. row ***************************Table: t1Create Table: CREATE TABLE `t1` (`a1` int DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin1 row in set (0.00 sec)
2. 继æ¿è®¾ç½®(éå¼è½¬æ¢)
é»è®¤ç»§æ¿æå±æ°æ®åºçº§å«çå符éåæåºè§åãè¿ééè¦æ³¨æçæ¯æå±æ°æ®åºï¼ä¸æ¯å½åæ°æ®åºã-- å½åæ°æ®åºÂ ytt_new4.mysql> use ytt_new4;Database changed-- 表 t2 å±äºå½åæ°æ®åºÂ ytt_new4mysql> create table t2(a1 int);Query OK, 0 rows affected (0.05 sec)-- æ¥ç表 t2 å符éåæåºè§åmysql> show create table t2\G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`a1` int DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci1 row in set (0.00 sec)-- å建表 t3ï¼ä¸è¿å±äºæ°æ®åºÂ ytt_new5mysql> create database ytt_new5 character set gbk;Query OK, 1 row affected (0.03 sec)mysql> create table ytt_new5.t3 (id int);Query OK, 0 rows affected (0.04 sec)-- æ¥ç表 t3 å符éï¼åæ°æ®åºÂ ytt_new5 ä¸è´mysql> show create table ytt_new5.t3\G*************************** 1. row ***************************Table: t3Create Table: CREATE TABLE `t3` (`id` int DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=gbk1 row in set (0.01 sec)
3. è§å¾
è§å¾å ¶å®å°±æ¯èæç表ï¼æ以è§å¾çå符éä¹åå¨è¡¨è¿åç®åä»ç»ä¸ãè§å¾çå符éå®å ¨ä¾èµå®¢æ·ç«¯çå符é设置ãæ¯å¦ï¼mysql> set names gbk;Query OK, 0 rows affected (0.00 sec)-- æ¤æ¶è§å¾Â v_t3 ç¼ç 为 gbkmysql> create view v_t3 as select * from t3;Query OK, 0 rows affected (0.01 sec)mysql> set names gb18030;Query OK, 0 rows affected (0.00 sec)-- æ¤æ¶è§å¾Â v_t31 ç¼ç 为 gb18030mysql> create view v_t3_1 as select * from t3;Query OK, 0 rows affected (0.01 sec)-- æ¥çè¿ä¸¤ä¸ªè§å¾çç¼ç mysql> show create view v_t3\G*************************** 1. row ***************************View: v_t3Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_t3` AS select `t3`.`a1` AS `a1` from `t3`character_set_client: gbkcollation_connection: gbk_chinese_ci1 row in set (0.01 sec)mysql> show create view v_t3_1\G*************************** 1. row ***************************View: v_t3_1Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_t3_1` AS select `t3`.`a1` AS `a1` from `t3`character_set_client: gb18030collation_connection: gb18030_chinese_ci1 row in set (0.00 sec)
4. 触åå¨
触åå¨åºäºè¡¨ï¼æ以触åå¨ä¹å½ç±»å°è¡¨è¿åãå ¶å®è§¦åå¨çç¼ç è§ååè§å¾ä¸æ ·ãä¹æ¯ä¾èµå®¢æ·ç«¯ç设å®ãæ¯å¦ä¸ä¸ªç®åç触åå¨ï¼-- 客æ·ç«¯ç¼ç 为 utf8mysql> set names utf8;Query OK, 0 rows affected, 1 warning (0.00 sec)-- 触åå¨çç¼ç ä¹ç»§æ¿åæ ·ç客æ·ç«¯ç¼ç mysql> create trigger tr_after_insert_t3 after insert on t3 for each row  insert into t4 values(new.a1);Query OK, 0 rows affected (0.01 sec)mysql> show create trigger tr_after_insert_t3\G*************************** 1. row ***************************Trigger: tr_after_insert_t3sql_mode:SQL Original Statement: CREATE DEFINER=`root`@`localhost` TRIGGER `tr_after_insert_t3` AFTER INSERT ON `t3` FOR EACH ROW insert into t4 values(new.a1)character_set_client: utf8collation_connection: utf8_general_ciDatabase Collation: utf8mb4_0900_ai_ciCreated: 2020-03-09 11:32:23.941 row in set (0.00 sec)
ä¸ãååå符é1. æ¾å¼æå®åæ°æ®åºå表ä¸æ ·ï¼åä¹å¯ä»¥æ¾å¼æå®ç¹å®çå符éåæåºè§åãè½è¯´æ¯å¯ä»¥è¿æ ·åï¼ä½æ¯é常ä¸æ¨èï¼æ主è¦åå æ¯æ¯ä¸ªåå符éä¸ä¸æ ·ï¼å¯¼è´åå ¥åæ£ç´¢é½å¾é¢å¤çç¼å SQLã-- å建æ°åºÂ ytt_new6mysql> create database ytt_new6 character set latin1;Query OK, 1 row affected (0.02 sec)mysql> use ytt_new6;Database changed-- å¨ ytt_new6 ä¸å建表 t1ï¼æ¥æå段 a1,a2,a3 åå«ç»å®ä¸åçå符éåæåºè§åmysql> create table t1( a1 char(10) charset latin1 collate latin1_bin,a2 char(10) charset gbk collate gbk_bin,a3 char(10) charset utf8mb4 collate utf8mb4_bin);Query OK, 0 rows affected (0.05 sec)mysql> show create table t1\G*************************** 1. row ***************************Table: t1Create Table: CREATE TABLE `t1` (`a1` char(10) CHARACTER SET latin1 COLLATE latin1_bin DEFAULT NULL,`a2` char(10) CHARACTER SET gbk COLLATE gbk_bin DEFAULT NULL,`a3` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)é£æ¥ä¸æ¥ç®åæå ¥ä¸æ¡è®°å½ï¼éè¦ä¸ºæ¯åæ·»å introduerï¼å¦åæ¥éã-- 没ææ¾å¼æå®æ¯åå符éï¼æ¥émysql> insert into t1 values ('character ','å符éå','å符éå');ERROR 1366 (HY000): Incorrect string value: '\xAC\xA6\xE9\x9B\x86\xE5...' for column 'a2' at row 1-- 为æ¯åæ¾å¼æ·»å  Introducermysql> insert into t1 values (_latin1 'character ',_gbk 'å符éå',_utf8mb4 'å符éå');Query OK, 1 row affected (0.01 sec)æ¥è¯¢åºæ¥æ麻ç¦ï¼å 为æ¯æ¬¡æ¥è¯¢åºæ¥çç»æåªè½æä¸ä¸ªå符éï¼å符éå ¼å®¹çåå¯ä»¥ä¸èµ·æ£ç´¢ï¼ä¸å ¼å®¹çåå¾åå¼æ£ç´¢ã举个ä¾åï¼ææ³ç®åçSELECT *æ¿åºææè®°å½ï¼ç»æåç°æä¸ä¸ªå段æ®æ¾ç¤ºä¸æ£å¸¸ãmysql> select * from t1;+-----------+------------------+--------------+| a1        | a2               | a3           |+-----------+------------------+--------------+| character | çæ¥?éåæ      | å符éå     |+-----------+------------------+--------------+1 row in set (0.00 sec)æ以é对è¿ç§æ å½¢ï¼è¯¥æä¹æ£ç´¢æ°æ®å¢ï¼å¿ é¡»å¾å¯¹å个å段æ£ç´¢æè æ¯å¯¹å ¼å®¹çåä¸èµ·æ£ç´¢ã-- 以å符é GBK è¾åºå a1 a2ï¼ç±äºÂ a1 æ¯ä¿åçæ¯åæ¯ï¼æä»¥å ¼å®¹è¾åºãmysql> set names gbk;Query OK, 0 rows affected (0.00 sec)mysql> select a1,a2 from t1;+-----------+--------------+| a1        | a2           |+-----------+--------------+| character | å符éå     |+-----------+--------------+1 row in set (0.00 sec)-- 以å符éutf8mb4ågbkä¸å ¼å®¹ï¼å¾åç¬è¾åºåa3ãæè åç¬è¾åºa2.mysql> set names utf8mb4;Query OK, 0 rows affected (0.00 sec)mysql> select a3 from t1;+--------------+| a3           |+--------------+| å符éå     |+--------------+1 row in set (0.00 sec)
2. éå¼è½¬æ¢
è¿ç§æ¹å¼ï¼æ¯ææ¨èçï¼ä¹æ¯æé¿çæ¹å¼ï¼ææå继æ¿è¡¨çå符éï¼ä¸åç¬æå®ã-- 建表 t2ï¼æå®å符é为 gbk.mysql> create table t2(a1 varchar(10),a2 varchar(10)) charset gbk;Query OK, 0 rows affected (0.05 sec)mysql> show create table t2\G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`a1` varchar(10) DEFAULT NULL,`a2` varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=gbk1 row in set (0.01 sec)ä½æ¯è¿éæä¸ä¸ªéè¦æ³¨æçç¹ï¼å¦ææ¤æ¶å¯¹è¡¨è¿è¡å符éåæ´ï¼é£è¡¨çåä¾ç¶ä¿çåæ¥çå符éãä¾å¦ï¼mysql> alter table t2 charset utf8;Query OK, 0 rows affected, 1 warning (0.01 sec)Records: 0  Duplicates: 0  Warnings: 1mysql> show create table t2\G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`a1` varchar(10) CHARACTER SET gbk DEFAULT NULL,`a2` varchar(10) CHARACTER SET gbk DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)å¦ææ³æ表éå段çå符éä¹æ¹äºï¼åºè¯¥ç¨ä»¥ä¸è¯å¥æ´æ¹è¡¨å符éãmysql> alter table t2 convert to character set utf8;Query OK, 0 rows affected, 1 warning (0.09 sec)Records: 0  Duplicates: 0  Warnings: 1mysql> show create table t2\G*************************** 1. row ***************************Table: t2Create Table: CREATE TABLE `t2` (`a1` varchar(10) DEFAULT NULL,`a2` varchar(10) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)é£å°è¿å¿ï¼æ们已ç»äºè§£äºå符é对æ°æ®åºï¼è¡¨ä»¥ååç使ç¨ä»¥åç¸å ³å½±åã大è´æ»ç»ä¸ï¼è¿ç¯æ详ç»ä»ç»äºå符éå¨ MySQL æ°æ®åºï¼è¡¨ä»¥ååç¸å ³å¯¹è±¡å¤çæ¶ç注æäºé¡¹ï¼å¹¶ä¸ä¸¾ä¾è¯´æãå¸æ对大家æ帮å©ã