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,只能找外边了。外边有啥?也就是连接的字符集,我再看字符集的下拉列表,只有一个"自动",默认是这个,我于是选了这个,连接,查询一下数据,我发现,我刚刚插入的数据,还有通过转储建库带来的数据,中文都能正常显示了,看来是解决问题了。

总结:连接时的 自动 编码

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

相关推荐
l1t3 分钟前
DeepSeek总结的面向 PostgreSQL 分析和 HTAP 工作负载的两种高性能表访问方法
数据库·postgresql
九皇叔叔3 分钟前
MySQL 8.x 隔离级别调整
数据库·mysql·事务·隔离级别
许愿OvO6 分钟前
Redis 7.4.8高可用集群实战:主从复制+哨兵+Cluster全解析
数据库·redis·bootstrap
2401_831419446 分钟前
如何用 http 模块创建一个基础的 Web 服务器处理请求
jvm·数据库·python
pele6 分钟前
Redis如何防止AOF文件无限增大_触发BGREWRITEAOF命令进行日志重写
jvm·数据库·python
qq_414256576 分钟前
golang如何设计HTTP中间件链_golang HTTP中间件链设计方法
jvm·数据库·python
m0_746752307 分钟前
如何用方法简写语法在对象字面量中快速定义成员函数
jvm·数据库·python
qq_189807039 分钟前
JavaScript 中高效定位二维数组间不匹配元素的行列索引
jvm·数据库·python
小脑斧1239 分钟前
Oracle透明网关,亲测好用
oracle
qq_3493174813 分钟前
Python GUI界面如何实现主题美化_引入ttk模块实现原生外观风格
jvm·数据库·python