--- date created: 2022-01-01 21:22 --- # mysql 字段编码的问题 mysql 编码有 数据库编码 表编码 字段编码 [mysql 中查看表、字段的编码格式_what you want!-CSDN博客](https://blog.csdn.net/zf472422160/article/details/84604124) ```sql -- 查看表的字段编码 show full columns from dacp_dataex_cdr; -- 查看表的编码格式: show create table dacp_dataex_cdr; -- 修改数据库的编码格式: mysql>alter database databasename character set utf8 -- 修改表的编码格式 (不会修改列) mysql>alter table tablename character set utf8 ## alter table t2 default character set utf8mb4; -- (不会修改列) alter table t2 convert to character set utf8mb4; -- 修改字段的编码格式 这句会修改所有列 alter table tablename modify fieldname varchar(50) character set utf8 ``` 原来的表中之前定义的列(字段)的编码类型不会因为表的编码格式而变化,还是latin1(拉丁文格式), 但新建列的类型为是UTF8格式的。由此可见MYSQL中的数据编码格式已经粒子化到 单位“列”。 在建 数据库的时候可以指定数据库编码格式,在这之后所建的表和列的编码格式都会以此格式为默认格式。若之后想改数据库的编码格式的话,想要把之前的表和列的编码格式都改过来的话就要一一改过来了。 **批量改字符 的字段,其他好像没有方便的方法** ```sql -- **把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:** ALTER TABLE dacp_dataex_cdr CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE dacp_dataex_cdr CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` [更改表的字符集(utf8 to utf8mb4)_多维217的博客-CSDN博客_修改表的字符集](https://blog.csdn.net/wl21787/article/details/107090351/) [mysql 字符编码的查看与修改 - tresser - 博客园](https://www.cnblogs.com/tresser/p/9308045.html) # mysqldump 数据导出详解 [MySQL mysqldump数据导出详解 - pursuer.chen - 博客园](https://www.cnblogs.com/chenmh/p/5300370.html) ```shell mysqldump \ --host=127.0.0.1 --user=root -p --port=5623 \ --default-character-set=utf8mb4 \ --master-data=2 --single-transaction test t2 >/data/mysql/tmp/t2.sql ``` ## ignore-table 排除表 ```shell mysqldump -u root -p DB_NAME --ignore-table=DB_NAME.table1 --ignore-table=DB_NAME.table3 > database.sql docker run --rm mysql:5.7 mysqldump -h172.22.4.41 -uroot -pqa@123 --ignore-table=ci_jszf_dev.dacp_trace_log --ignore-table=ci_jszf_dev.dacp_trace_log_bak -B ci_jszf_dev > /data01/dataos_mysql_backup/${today}/ci_jszf_dev.sql ``` # 查看mysql数据库容量大小 [查看mysql数据库容量大小 - --smile - 博客园](https://www.cnblogs.com/--smile/p/11451238.html) ## 查看所有数据库各容量大小 ```sql select table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables group by table_schema order by sum(data_length) desc, sum(index_length) desc; ``` # Mysql 复制数据库及数据 [Mysql 复制数据库及数据 - ㄓㄤㄑㄧㄤ - 博客园](https://www.cnblogs.com/azhqiang/p/13177683.html) ```sql create database ci_jszf_dev_new default character set utf8mb4 collate utf8mb4_general_ci; create database ci_jszf_dev_new default character set utf8 collate utf8_general_ci; ./mysqldump ci_jszf_dev -uroot -pqa@123 --add-drop-table | ./mysql ci_jszf_dev_new -uroot -pqa@123 mysqldump data -u root -p123456 --add-drop-table | mysql -h 192.168.1.22 newdata -u root -p123456 docker exec -it mysql57_185 /bin/bash mysql -uroot -pCq185@mDxKpa mysqldump jfzx_manage_dev -u root -pCq185@mDxKpa --add-drop-table | mysql jfzx_manage_0825_back -uroot -pCq185@mDxKpa mysqldump jfzx_system_dev -u root -pCq185@mDxKpa --add-drop-table | mysql jfzx_system_0825_back -uroot -pCq185@mDxKpa ``` # mysql 数据库 改名 [MySQL数据库改名的三种方法 - yayun - 博客园](https://www.cnblogs.com/gomysql/p/3584881.html) > shell 脚本改表名 ```shell docker exec -i mysql57 mysql -uroot -pMy1014@Do -e 'create database if not exists bak_ci_jszf_pro' list_table=$(docker exec -i mysql57 mysql -uroot -pMy1014@Do -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='ci_jszf_pro'") for table in $list_table do docker exec -i mysql57 mysql -uroot -pMy1014@Do -e "rename table ci_jszf_pro.$table to bak_ci_jszf_pro.$table" done create database ci_jszf_dev_new default character set utf8 collate utf8_general_ci; ``` [为什么现在MySQL无法重命名数据库? - 知乎](https://www.zhihu.com/question/63551632) > 数据量小 -- mysqldump > 数据量大 -- 改表名 实际上 使用数据库复制的方法也可行 ```shell ./mysqldump ci_jszf_dev -uroot -pqa@123 --add-drop-table | ./mysql ci_jszf_dev_new -uroot -pqa@123 docker exec -i mysql57 mysqldump ci_jszf_pro -uroot -pMy1014@Do --add-drop-table | docker exec -i mysql57 mysql bak_ci_jszf_pro -uroot -pMy1014@Do docker exec -i mysql57 mysqldump ci_jszf_dev -uroot -pMy1014@Do --add-drop-table | docker exec -i mysql57 mysql bak_ci_jszf_dev -uroot -pMy1014@Do ```