天天看點

檢視mysql 字元集編碼_MySQL 檢視修改字元集

檢視MYSQL資料庫伺服器和資料庫字元集

方法一:show variables like '%character%';

方法二:show variables like 'collation%';

show charset;

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

[client]

default-character-set = utf8mb4

[mysql]

default-character-set = utf8mb4

[mysqld]

character-set-client-handshake = FALSE

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

init_connect='SET NAMES utf8mb4'

character_set_client(用戶端來源資料使用的字元集)

character_set_connection(連接配接層字元集)

character_set_database(目前選中資料庫的預設字元集)

character_set_results(查詢結果字元集)

character_set_server(預設的内部操作字元集)

檢視庫的字元集

show create database 表名;

show database status from 庫名 like 表名;

檢視表的字元集

show table status from 庫名 like 表名;

show table status from p2p_test like '%

'

show create table 表名

檢視表中所有列的字元集

show full columns from test_info;

修改全局字元集

set character_set_connection=utf8;

set character_set_database=utf8;

set character_set_results=utf8;

set character_set_server=utf8;

set character_set_system=utf8;

set collation_connection=utf8;

set collation_database=utf8;

set collation_server=utf8;

https://www.cnblogs.com/xingzc/p/6039350.html

修改庫的字元集

alter database db_name default character set gbk;

ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];

ALTER DATABASE caitu99 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

把表預設的字元集和所有字元列(CHAR,VARCHAR,TEXT)改為新的字元集:

alter table 表名 convert to character set 字元集;

ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]

ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

隻是修改表的預設字元集

ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];

ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

修改字段的字元集

ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];

alter table test1 modify name char(10) character set gbk;

ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

同時修改某一個資料庫中所有表的所有字段的編碼格式

mysql中的begin-end流程控制語句與局部變量

begin-end、流程控制語句、局部變量隻能用于函數、存儲過程内部、遊标、觸發器的定義内部。

https://blog.csdn.net/baoliangsheng/article/details/46459471

begin

DECLARE cnt VARCHAR(100); -- 聲明變量用來記錄查詢出的表名

DECLARE i int; -- 循環條件,同時可以用來标記表第幾張表

set i = 0;

-- 循環開始

while i < 32 do -- 這裡是32是因為我的資料庫中表的數量是32,想不寫死可以通過再定義一個變量,動态指派

select table_name into @cnt from information_schema.`TABLES` where TABLE_SCHEMA = '資料庫名' limit i,1;

-- select @cnt; -- mysql的列印語句

-- alter table @cnt convert to character set utf8; -- 這一句報錯,必須動态拼接才行

set @sql = concat("alter table ", @cnt, " convert to character set utf8"); -- 拼接,注意語句中的空格

prepare stmt from @sql; -- 預處理

execute stmt; -- 執行

deallocate prepare stmt; -- 釋放

set i = i + 1;

end while;

-- 循環結束,注意分号

end

https://blog.csdn.net/LUNG108/article/details/78285054

查找表資訊

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_status` $$

CREATE PROCEDURE `sp_status`(dbname VARCHAR(50))

BEGIN

-- Obtaining tables and views

(

SELECT

TABLE_NAME AS `Table Name`,

ENGINE AS `Engine`,

TABLE_ROWS AS `Rows`,

CONCAT(

(FORMAT((DATA_LENGTH + INDEX_LENGTH) / POWER(1024,2),2))

, ' Mb')

AS `Size`,

TABLE_COLLATION AS `Collation`

FROM information_schema.TABLES

WHERE TABLES.TABLE_SCHEMA = dbname

AND TABLES.TABLE_TYPE = 'BASE TABLE'

)

UNION

(

SELECT

TABLE_NAME AS `Table Name`,

'[VIEW]' AS `Engine`,

'-' AS `Rows`,

'-' `Size`,

'-' AS `Collation`

FROM information_schema.TABLES

WHERE TABLES.TABLE_SCHEMA = dbname

AND TABLES.TABLE_TYPE = 'VIEW'

)

ORDER BY 1;

-- Obtaining functions, procedures and triggers

(

SELECT ROUTINE_NAME AS `Routine Name`,

ROUTINE_TYPE AS `Type`,

'' AS `Comment`

FROM information_schema.ROUTINES

WHERE ROUTINE_SCHEMA = dbname

ORDER BY ROUTINES.ROUTINE_TYPE, ROUTINES.ROUTINE_NAME

)

UNION

(

SELECT TRIGGER_NAME,'TRIGGER' AS `Type`,

concat('On ',EVENT_MANIPULATION,': ',EVENT_OBJECT_TABLE) AS `Comment`

FROM information_schema.TRIGGERS

WHERE EVENT_OBJECT_SCHEMA = dbname

)

ORDER BY 2,1;

END$$

DELIMITER ;

CALL sp_status(DATABASE());

https://blog.csdn.net/xhiaa/article/details/7814686

修改腳本

show charset;

set character_set_database=utf8mb4;

set collation_database=utf8mb4_general_ci;

ALTER DATABASE caitu99 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

DELIMITER //

DROP PROCEDURE IF EXISTS `proc_reset_table_character` //

create PROCEDURE proc_reset_table_character ()

BEGIN

DECLARE cnt VARCHAR(100); -- 聲明變量用來記錄查詢出的表名

DECLARE i int; -- 循環條件,同時可以用來标記表第幾張表

DECLARE t_cnt int;

set i = 0;

set @allsql='';

set t_cnt = 0;

select count(1) into t_cnt from information_schema.`TABLES` where TABLE_SCHEMA = 'db_test' and TABLE_TYPE = 'BASE TABLE'; -- and TABLE_COLLATION <> 'utf8_general_ci'

-- 循環開始

while i < t_cnt do -- 這裡是32是因為我的資料庫中表的數量是32,想不寫死可以通過再定義一個變量,動态指派

select table_name into @cnt from information_schema.`TABLES` where TABLE_SCHEMA = 'db_test' and TABLE_TYPE = 'BASE TABLE' limit i,1;

-- select @cnt; -- mysql的列印語句

-- alter table @cnt convert to character set utf8; -- 這一句報錯,必須動态拼接才行

set @sql = concat("alter table ", @cnt, " convert to character set utf8 COLLATE utf8_general_ci;"); -- 拼接,注意語句中的空格

prepare stmt from @sql; -- 預處理

execute stmt; -- 執行

deallocate prepare stmt; -- 釋放

set @allsql =concat(@allsql,CHAR(10),@sql);

set i = i + 1;

end while;

SELECT @allsql;

END

//

DELIMITER ;

-- SET @p_inout=1;

-- CALL inout_param(@p_inout) ;

-- SELECT @p_inout;

call proc_reset_table_character();

索引 限制

ALTER TABLE t_users DROP INDEX id_number;

ALTER TABLE `t_users` ADD INDEX id_number ( `id_number` ) ;

https://www.cnblogs.com/a-du/p/7117837.html

https://blog.csdn.net/u013967628/article/details/76559368