Navicat 查数据 乱码 解决 的经历

今日 一直没有太关注Navicat 界面上建立连接的事情,一般编码就默认(自动)了,一般也ok了,

期间解决其他插入数据报错的时候,无意中把建立连接的编码改了,我当时也没查数据库里的中文内容(其实这个时候,在mysql中用Navicat查询的时候,就已经是乱码),又继续忙用RAP读取电商网站下载下来的Excel数据,然后用RPA把读取出来的数据以2维列表形式插入到mysql数据库,其实是传参(2维列表是参数),RPA插入老是报错比方报:

Conversion from collation utf8mb3_general_ci into utf8mb4_general_ci impossi

我尝试:

1、更改字符集

客户端和服务器端的编码是不是都统一成功utf8mb4,或者统一重置成这个,重启mysql,效果不好,还是不好中文显示????英文能正常显示,

sql 复制代码
	-- 查看数据库的字符集
SHOW CREATE DATABASE be_test;

-- 修改数据库字符集为 utf8mb4
ALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

-- 查看表的字符集
SHOW CREATE TABLE redbook_order_Copy;

-- 修改表的字符集为 utf8mb4
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

SELECT * from redbook_order_Copy
	
	
	SHOW VARIABLES LIKE 'character_set_%';
SHOW VARIABLES LIKE 'collation_%';
	
	
	ALTER DATABASE be_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE redbook_order_Copy CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
	
	
-- 1. 查看数据库字符集
SELECT SCHEMA_NAME '数据库', 
       DEFAULT_CHARACTER_SET_NAME '字符集',
       DEFAULT_COLLATION_NAME '排序规则'
FROM information_schema.SCHEMATA 
WHERE SCHEMA_NAME = 'be_test';

-- 2. 查看表字符集
SELECT TABLE_SCHEMA '数据库',
       TABLE_NAME '表',
       TABLE_COLLATION '排序规则'
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'be_test'
AND TABLE_NAME = 'redbook_order_Copy';

-- 3. 查看字段字符集
SELECT TABLE_SCHEMA '数据库',
       TABLE_NAME '表',
       COLUMN_NAME '字段',
       CHARACTER_SET_NAME '字符集',
       COLLATION_NAME '排序规则'
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'be_test'
AND TABLE_NAME = 'redbook_order_Copy'
AND CHARACTER_SET_NAME IS NOT NULL;

-- 4. 修改数据库字符集为 utf8mb4
ALTER DATABASE be_test CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

-- 5. 修改表字符集
ALTER TABLE redbook_order_Copy CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 6. 修改特定字段字符集
ALTER TABLE redbook_order_Copy MODIFY COLUMN 字段名 VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

2、因为是乱码,我尝试,在连接中增加字符集,

在RPA界面的连接组件中把连接字符串中增加字符集,效果依旧不好:

bash 复制代码
 Provider=MSDASQL.1;Password=AAAAA;Persist Security Info=True;User ID=ShBe;Data Source=localb;Initial Catalog=be_test;CharacterSet=utf8mb4;Charset=utf8mb4

3、重建数据库

后来想是不是我改字符集,把数据库给改乱了,索性把数据库删除了。重建库的时候,注意使用utf8mb4,然后再重新加载MYSQL转储的建库建表文件,我看了一下,转存的sql文件,也包含了建表都是使用的是utf8mb4,环境如之前的状态,我用RPA跑一下插入Excel里面的数据到mysql,

然后我在Navicat界面上,查询一下,我刚刚插入的数据,中文还是乱码:???,非中文都 没问题。

怪事,于是我查之前mysql转储过来的内容,,中文还是????,

反思:

那就是可以得出简单的结论,数据库没问题,为啥之前是能够正常显示中文,而现在不行,于是我尝试在Navicat上找原因,因数据库都一样了,之前不是乱码,突然现在乱码,那就前台的原因了。

百度了一下,Navicat的高级里面有编码,我当前是utf8,也就是65001,于是我换成gb2312或其他编码,仍然是一样的乱码,于是我认真找起这个Navicat来,连接进去就是数据库的字符集和表的字符集了,虽然字段也能设定编码,但是进去以后的编码统统都是utf8mb4,只能找外边了。外边有啥?也就是连接的字符集,我再看字符集的下拉列表,只有一个"自动",默认是这个,我于是选了这个,连接,查询一下数据,我发现,我刚刚插入的数据,还有通过转储建库带来的数据,中文都能正常显示了,看来是解决问题了。

总结:连接时的 自动 编码

"自动",就是当前不知道编码情况下,最好的选择方式,我想这里也是软件厂商在编码出为什么要增加一个"自动"的原因。

相关推荐
Ama_tor15 分钟前
从零开始MySQL|F盘安装,配置,简单应用以及基础语句
数据库·mysql
亓才孓2 小时前
【MyBatis Exception】Public Key Retrieval is not allowed
java·数据库·spring boot·mybatis
_千思_2 小时前
【小白说】数据库系统概念 6
数据库
野犬寒鸦4 小时前
深入解析HashMap核心机制(底层数据结构及扩容机制详解剖析)
java·服务器·开发语言·数据库·后端·面试
ruxshui4 小时前
元数据及元数据备份、迁移详解
数据库
禅与计算机程序设计艺术5 小时前
了解NoSQL的数据仓库和ETL
数据库·数据仓库·nosql·etl
专注前端30年5 小时前
负载均衡实战项目搭建指南:从基础到高可用全流程
运维·数据库·负载均衡
山岚的运维笔记6 小时前
SQL Server笔记 -- 第68章:内存中 OLTP(Hekaton)
数据库·笔记·sql·microsoft·sqlserver
山岚的运维笔记7 小时前
SQL Server笔记 -- 第67章:数据库邮件(DBMAIL)
数据库·笔记·sql·microsoft·sqlserver