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

总结:连接时的 自动 编码

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

相关推荐
TDengine (老段)14 分钟前
TDengine taosAdapter — 多协议网关详解
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
Nturmoils14 分钟前
SQL Server 迁移到 KingbaseES:一次复杂 BI 查询的性能实测
数据库
今天AI了吗1 小时前
MCP 协议打通 AI 与国产数据库,SQL 调优全流程一站式闭环
数据库·人工智能·sql
灯澜忆梦1 小时前
【MySQL11】进阶篇 | 索引_#3使用规则
数据库·sql·mysql·性能优化
名字还没想好☜1 小时前
Go 的 sync.Cond 实战:用条件变量做等待/通知,比忙轮询省 CPU
开发语言·数据库·后端·golang·go
wWYy.2 小时前
Mysql:有哪些锁?
数据库·mysql
李可以量化2 小时前
Tornado 从了解到精通(一)下:异步与非阻塞 IO 核心原理
java·数据库·tornado
hey_sml2 小时前
MySQL常用操作速记:从字符集到游标全解析
java·开发语言·mysql
云技纵横2 小时前
线上接口突然超时,怎么判断卡在 Nginx、线程池、连接池还是 SQL?
后端·sql·mysql
VALENIAN瓦伦尼安教学设备3 小时前
ASHOOTER激光对中仪如何通过颜色确定调整是否合适
数据库·嵌入式硬件·算法