mysql1366错误:字符集冲突导致插入数据异常,解决方案

createh53个月前 (02-01)技术教程38

一:异常信息:errorCode:1366

Caused by: java.sql.SQLException: Incorrect string value: '\xE7\xAE...' for column 'description' at row 1

二:异常原因:字符集冲突

mysql insert入库的时候,由于插入数据编码与数据库字段字符集不一致,导致数据无法插入。

三:追本溯源

在mysql数据库中执行show character set,可以看到不同的字符集的最大长度不同。

如果只插入utf8编码数据,数据库表中字段字符集是latin。(查询字段字符集方法:show full columns from user;)


如果最大长度为3的utf8字符集存储到最大长度为1的latin数据库字段中,数据会被截断,无法正常插入,导致异常。

四:解决办法

修改数据库的字符集编码

MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下;在Linux下叫my.cnf,该文件位于/etc/my.cnf。

(1)window服务器

mysql数据库的配置文件my.ini,此文件放在mysql根目录下。在此文件下查找default-character-set属性,并将其值更改为utf8:default-character-set = utf8

(2)linux服务器
修改my.cnf
vi /etc/my.cnf
在[client]下添加
default-character-set=utf8
在[mysqld]下添加

default-character-set=utf8

在新的版本5.5以上,如果这样修改的话,会造成无法启动的错误,
报的是pid文件更新问题。

经过查看mysql日志,如下:


是default-character-set参数不可用。
新版本mysql配置方法是
在[mysqld]下把default-character-set=utf8换成character-set-server=utf8就可以了
重启mysql可以使用 sudo /etc/init.d/mysql restart
注意修改数据库编码以后,需要把以前的数据库删除掉,重新建立。
五:补充知识
(1)字符(Character)是指人类语言中最小的表义符号。例如'A'、'B'等;
给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding)。例如,我们给字符'A'赋予数值0,给字符'B'赋予数值1,则0就是字符'A'的编码;

给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set)。例如,给定字符列表为{'A','B'}时,{'A'=>0, 'B'=>1}就是一个字符集;

(2)字符序(Collation)是指在同一字符集内字符之间的比较规则;
确定字符序后,才能在一个字符集上定义什么是等价的字符,以及字符之间的大小关系;
每个字符序唯一对应一种字符集,但一个字符集可以对应多种字符序,其中有一个是默认字符序(Default Collation);

MySQL中的字符序名称遵从命名惯例:以字符序对应的字符集名称开头;以_ci(表示大小写不敏感)、_cs(表示大小写敏感)或_bin(表示按编码值比较)结尾。例如:在字符序``utf8_general_ci''下,字符``a''和``A''是等价的;

(3)MySQL字符集设置
系统变量:
– character_set_server:默认的内部操作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
– character_set_system:系统元数据(字段名等)字符集

相关文章

详解Java异常(Exception)处理及常见异常

很多事件并非总是按照人们自己设计意愿顺利发展的,经常出现这样那样的异常情况。例如: 你计划周末郊游,计划从家里出发→到达目的→游泳→烧烤→回家。但天有不测风云,当你准备烧烤时候突然天降大雨,只能终止郊...

深圳尚学堂Java培训:JAVA中的异常处理

在JAVA中,异常对象都是派生于Throwable类的一个实例。Throwable -˃ ErrorThrowable -˃ Exception -˃IOException or Runtime Ex...

学习Java快速入门全流程体系介绍-异常处理

Java异常处理是指在程序运行时检测到异常情况并尝试以适当的方式进行处理的机制。Java中提供了一种try-catch-finally结构来处理异常。处理异常的主要目的是使程序在遇到错误时能够优雅地退...

Android应用编程基础第19篇:Java语言中的异常处理

我们先来了解下几个基本概念:1.什么是异常?异常也称为例外,是在程序运行过程中发生的、会打断程序正常执行的事件。2.异常有哪些?常见的异常有三种:1)算术异常(ArithmeticException)...

探秘java异常处理机制(java异常处理是怎样实现的)

在Java编程中,异常处理是一项至关重要的技术。它使我们能够预测并处理代码中可能出现的错误,并采取相应的措施进行恢复或处理。1. 为什么需要异常处理机制在编写代码时,我们难免会遇到各种错误和异常情况,...

Java系列全面总结:泛型+异常+反射+集合+注解+Lambda表达式等详解

Java基础非常重要,俗话说得好地基不牢后续地动山摇 ,所以基础很重要@mikechen在过去的时间中,我写过Java基础的整个系列,为了方便大家的阅读,也为了让知识更系统化,这里我单独把Java基础...