MySQL的字符集错误

在使用字符集的时候有三个部分:


1. 服务器上使用的字符集,是我们在表定义时使用 default charset 指定的字符集

2. 连接使用的字符集,一般用 set names 指定

3. 客户端使用的字符集,插入记录时记录的字符集


如果不在乎汉字在数据库中怎么保存,那么只需要保证1,2一致,然后写入和读取的3都一样,在使用时就不会有乱码了,即使在数据库中保存的内容实际和指定的字符集不一样。这就是为什么默认都使用latin1的编码,但应用程序中不会出现问题。如果这时1和2不一样,MySQL会自动转码,可能会因为1的编码范围没有包含汉字的编码而导致乱码。


如果希望数据库中的内容和指定的字符集一致,那么1中就要设成gbk或utf8以保证符合汉字的编码范围。然后2,3的字符集始终要保持一致,但写入和读出时使用的字符集可以不同。比如:
表定义中使用gbk

CREATE TABLE `aa` (
`a` varchar(20) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk

插入记录时使用utf8,MySQL会自动把utf8的字符转成gbk的字符后插入数据库。为了使插入记录是utf8编码的,这时需要把 term 的编码设成utf8。使用putty的话,在 change settings/Translation 中更改。
mysql> set names utf8;
mysql> insert into aa values ('你好');

然后当读出的时候,可是仍使用utf8,或者使用gbk:
mysql> set names gbk;
mysql> select * from aa;
+------+
| a |
+------+
| 你好 |
+------+
1 rows in set (0.00 sec)

MySQL会以gbk输出内容,这时需要把 term 的编码改成gbk以正常显示。putty 中可以把显示字体改为中文字体,然后选择编码为 Use font encoding,以显示gbk的编码。


如果在插入是2,3使用的字符集不一致,那么正常读取的时候就会出现乱码。比如现在 term 的编码是utf8。


mysql >set names gbk;
Query OK, 0 rows affected (0.00 sec)

mysql>insert into aa values ('明天');
Query OK, 1 row affected (0.00 sec)

mysql>set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql>select * from aa;
+-----------+
| a |
+-----------+
| 你好 |
| 鏄庡ぉ |
+-----------+
2 rows in set (0.01 sec)

这时aa中的第二条记录在数据库中保存的是"明天"的utf8编码,所以如果用 set names utf8,MySQL在读取时会做一次gbk到utf8的转换导致乱码。如果 set names gbk,那么MySQL不会做编码转换,需要保存 term 的编码为utf8才能正常显示第二条记录,但第一条又会变成乱码:
mysql >select * from aa;
+--------+
| a |
+--------+
| ▒▒▒ |
| 明天 |
+--------+
2 rows in set (0.00 sec)

我们可以使用下面的语句纠正编码

mysql >set names utf8;
Query OK, 0 rows affected (0.00 sec)

mysql >update aa set a = convert(convert(a using binary) using utf8) where a <> '你好';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql >select * from aa;
+--------+
| a |
+--------+
| 你好 |
| 明天 |
+--------+
2 rows in set (0.00 sec)

同样的,如果原来使用的编码一直是latin1,之后想转成utf8,可以按照如下步骤:

create table x (a varchar(10)) character set latin1;
set names latin1;
insert into x values ('你好');
set names utf8;
alter table x modify a varchar(10) character set utf8;
update x set a = convert(convert(convert(a using latin1) using binary) using utf8);

Reality Capture控制点修复/合并模型 通过增加控制点/修改对齐设置参数来修复模型被分为两个部分的解决方法 阅读详情

相关推荐

【Docker】Docker安装Hadoop分布式集群

hadoop目录安装在:/usr/local/hadoop-2.7.0/etc/hadoop。访问Hadoop102:9870,查看是否能够看到hdfs界面。访问hadoop103:8088,查看能够看到yarn界面。在yarn上可以看到执行情况。

weixin_46429290的博客 3461

mysql字符编码的设置以及mysql中文乱码的解决方法

最近在开发过程中,使用到mysql的数据库,而在将中文数据插入到数据库的时候出现了数据乱码的问题,在网上找了很多方法,问了很多人,试了很久才发现网上有的方法是不行的,因此在此记录下,以便他人查找。 查看字符编码 首先,将中文插入到数据库乱码是因为没有将数据库编码设置为支持中文的编码,mysql的默认编码是Latin1,不支持中文,应该设置为utf8查看自己的数据库编码是否已设置好,进入

yipiankongbai的专栏 6万+

标准高斯过程回归(Gaussian Processes Regression, GPR)从零开始,公式推导

标准高斯过程回归从零开始公式推导

qq_43587949的博客 1万+

字符集错误解决

1错误描述与表现 错误描述与表现: 登录服务器发现如下报错 -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory 2错误排查过程 以为是系统字符集的问题,于是打印系统的$LANG,发现并没有异常 #查看系统字符集的几种方式 echo $LANG env |gr...

weixin_30808575的博客 593

【ISAR成像定标方法(1)—转台目标的RD成像算法MATLAB仿真】

ISAR成像定标方法的研究具有重要意义,但是与之相关的学习资料以及仿真对于小白来说很难找或者很杂乱,本人作为小白之一在研究过程中苦不堪言,现在自己所要研究的定标内容已经完成,以后还学不学雷达也不一定,因为后面的路更难,现在打算把一些相关推导和仿真结果列出来,以供小白交流学习使用,希望能有点帮助。(PS:由于公式和符号的原因,采用图片形式说明)

此木旧年的博客 6418

Android 面试题 Handler篇

1.Handler的实现原理。

ViewHandKownHealth的博客 955

MySQL数据库中如何使用中文

在使用数据库时,在插入数据时输入姓名地址等数据时,当我们输入中文时会报错,这是因为MySQL数据库默认字符集是拉丁文,输入命令可以查看到默认字符集,要想输入中文不报错有一下两种方式。...

qq_61903414的博客 1万+

飞书应用开发脚手架lark-harness:从零构建企业级机器人

在构建企业级应用时,开发脚手架是提升工程效率和规范性的关键工具。其核心原理在于通过预设的项目模板、最佳实践和通用模块封装,自动化处理项目初始化、配置管理和基础架构搭建。这种技术价值在于将开发者从重复性劳动中解放出来,确保团队技术栈统一,并降低维护成本。在Node.js生态中,脚手架常与Express或Koa等Web框架结合,用于快速构建Web服务、API接口和实时事件处理系统。具体到飞书开放平台开发场景,开发者需要处理OAuth 2.0授权、事件订阅验证、消息加解密等复杂且标准的流程。lark-harnes

weixin_30703911的博客 613

mysqlworkbench转换为中文

MySQL Workbench 中文界面设置指南 作为一名经验丰富的开发者,我经常被问到如何将 MySQL Workbench 的界面语言设置为中文。下面,我将通过一篇详细的教程,帮助刚入行的小白们实现这一功能。 流程概览 首先,让我们通过一个表格来概览整个设置过程: 步骤 描述 1 下载并安装 MySQL ...

weixin_27130513的博客 1万+

Vue3 - Element Plus 表格组件 el-table “表格行数据中又嵌套了二维对象数组“,按平级循环渲染(嵌套数组视为同级行数据), 对嵌套的数组循环展示为表格,智能合并行或列详细教程

vue3,nuxt3,element-plus,table表格组件,el-table,vue3element表格组件,数据中有二维数组怎么遍历循环显示,表格数据带二级数组怎么循环渲染显示,表格数据中存在一个数组要怎么才能显示到表格,el-table表格合并详细教程示例,table表格如果对象里面还有对象数组那该怎么去渲染,平常都是数组中一个对象渲染成一行,每行中还有嵌套数组怎么办,每个行数据下还有一个数组怎么显示,怎么把表格相同的数据合并为一行,合并上下两行相同数据单元格,合并行或列如果遇到相同单元格就合

🏆 前端领域优质创作者 1万+

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

算法如诗的博客 5588

MySQL错误消息字符集全解析

MySQL错误消息统一以UTF-8构造,并根据客户端设置的character_set_results进行字符集转换。若目标字符集无法表示某些字符(如中文),则会用\nnnn格式转义显示。服务器写入日志时直接使用UTF-8,发送给客户端时则会自动转换编码。建议统一使用utf8mb4字符集,并在客户端正确设置接收编码,以避免乱码问题。当看到\5F20这类转义字符时,通常是因为客户端字符集设置不支持原字符所致,可通过调整客户端编码解决。

m0_37607945的博客 1102

全国区块链职业技能大赛国赛考题前端功能开发

全国区块链职业技能大赛国赛考题区块链应用前端功能开发

本郡主是喵 1335

mysql 数据值 ,字符集错误

ERROR 1366 (HY000): Incorrect string value: ‘\xE8\xB5\xB5\xE9\x9B\xB7’ for column ‘Sname’ at row 1 错误描述 我的操作步骤: 1、创建数据库test,语句: create database test; 2、创建Student表: create table Student(SId varchar(10)...

Doraemon_meow_meow的博客 687

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

如何用AI自动修复MySQL字符集冲突错误

明确问题边界很重要 - 先准确定义要解决的具体问题善用AI的代码解释能力 - 复杂概念可以让AI用简单语言说明迭代优化很关键 - 第一版方案不一定完美,要持续改进未来还计划增加历史记录和团队共享功能,让这个工具帮助更多开发者。如果你也经常遇到MySQL字符集问题,不妨试试用AI来简化排查过程。

YellowSun24的博客 956

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

解决MySQL字符集冲突引发的“Illegal mix of collations”错误

解决字符集冲突

uncle_ll的博客 3291

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

mysql 1366的错误 字符集错误解决方案

mysql 1366的错误 字符集错误解决方案

hijk7的博客 144

mysql创建视图字符集1267_MYSQL字符集错误:ERROR1267(HY000):Illegalmixof...解决_MySQL

bitsCN.comMYSQL字符集错误:ERROR 1267 (HY000): Illegal mix of...解决老生常谈,MYSQL 字符集问题:1、mysql字符集mysql字段、表以及数据库、数据库连接、数据库返回结果、等都有着默认字符集。默认字符集基本上都是可以在建表建库之初进行设定的,有的也可以默认设置。但是,很多时候可能忘了设置字符集,另外连接数据库和返回结果、存储的时候,字符集...

weixin_35726635的博客 1755

mysql字符集以及字符集错误

1、mysql字符集介绍: 字符集是多个字符的集合,常见的字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。 计算机要处理字符集文字就需要进行字符编码。 ASCII字符集:美国信息互换标准编码,7位(bits)表示一个字符,共128字符,字符值从0到127 ASCII扩展字符集:从ASCII字符集扩充出来的,增加了更多符号,使用8位(bits)表示一个字符,共256字符。 Unicode字符集:支持现今世界各种不同语言的书面文本交换、处理及显示

timber wolf 1141

mysql 字符集错误 Illegal mix of collations

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34413802的博客 221

Mysql5.7 字符集、排序规则设置导致错误

一、报错信息及原因 错误输出信息,这是由于Mysql创建表时的字符集、排序规则方式和框架默认配置的不一致造成的: MySQL 5.5.3之后增加了utfmb4字符编码,以前PHP版本、Mysql版本低的时候习惯性选择: 资料表明,utf8和utfmb4差别不大,后者支持了一些emoji等特殊的字符,一般而言选谁都可以,我用laravel5.6版本的时候看到配置里默认使用utf8mb4: ...

小乔流水仁家的博客 1315

MySQL字符集错误

django.db.utils.OperationalError: (1267, "Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='") 以上报错很明显是由于字符集部匹配导致的。所以登入MySQL修改相关配置。 首先查看MySQL的数据库配置: mysql> show variables like '%coll%'; +-----------

JosephThatwho的博客 651

mysql字符集重启还原_mysql 启动1067错误及修改字符集重启之后复原无效问题

下载了官网的解压版mysql-5.6.37-winx64.zip,修改了配置文件,安装服务,直接使用;出现了中文乱码, 解决办法:在mysql-5.6.37-winx64目录下,新创建并配置一个my.ini文件(内容可以从网上找,也可以参考my-default.ini手动配置)注意:[client] 节点位置千万别放错,比如:错误方式:[mysqld]character-set-server=ut...

weixin_39563132的博客 93

mysql 1115错误,错误1115(42000):未知字符集:'utf8mb4'

I have a MySQL dump, which I tried to restore with:mysql -u"username" -p"password" --host="127.0.0.1" mysql_db < mysql_dbHowever, this threw an error:ERROR 1115 (42000) at line 3231: Unknown charac...

weixin_36463131的博客 2788

MySQL连表查询报字符集错误

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34318956的博客 224

解决mysql表或这字段字符集不一致错误

解决mysql表或这字段字符集不一致错误报错内容解决方式 报错内容 java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation ‘=’ 解决方式 1、首先找到相关表,查看表字符集是否一致 show table status from 数据库名称 like 表名; 2、查看字段是否一致 SHOW FULL COLUM

o12321o的博客 1848
上一篇: 在MySQL中使用memcached
下一篇: soliddb
epee
博客等级 码龄24年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值