Files
obsidian_note/技术探究/2021-10-23.md
2025-12-04 09:12:56 +08:00

155 lines
5.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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
```