mysql 1366 hy000_ERROR 1366 (HY000): Incorrect string value错误解决办法
本文地址:http://www.dutycode.com/post-5.html
除非注明,文章均为 www.dutycode.com 原创,欢迎转载!转载请注明本文地址,谢谢。
错误详情如上图:
原因主要是:字符集的问题
解决办法,将数据库、数据表以及数据表中的字段全部统一设置成utf8即可。
参考文章:
1、http://www.oseye.net/question/74
2、http://www.cnblogs.com/shishm/articles/1614407.html
3、http://tree-161219.iteye.com/blog/745054
在一个用Struts + Spring+ Hibernate +
Mysql架构的的项目里,通过前台表单向后台MySql数据库添加
数据,当遇到提交中文信息的时候,问题总是比较多,我见过的出错的情况有两种:
1)错误情况1:
ERROR
1366 (HY000): Incorrect string value
Incorrect string value:
'\xA1\xAA\xA1\xAA\xB0\xFC...' for column 'content' at row 1 Hibernate
flushing: Could not execute JDBC batch update; uncategorized SQLException for
SQL [insert into blog (comments, content, createdate, description, tid, title,
uid, id) values (?, ?, ?, ?, ?, ?, ?, ?)]; SQL state [HY000]; error code [1366];
Incorrect string value: '\xA1\xAA\xA1\xAA\xB0\xFC...' for column 'content' at
row 1; nested exception is java.sql.BatchUpdateException: Incorrect string
value: '\xA1\xAA\xA1\xAA\xB0\xFC...' for column 'content' at row 1
2)错误情况2:
提交时不报错,但是数据库中插入的中文显示为如“???”的乱码,同时在控制台打印的也是“???”的乱码字符。
因此涉及到中文字符的问题时,要格外注意“字符集编码”的问题。
====================
总结一下,在这样一个项目里,涉及到设置字符集的地方有:
1、JSP页面文件的编码:
pageEncoding="utf-8"%>
2、Struts、Spring配置文件(XML)的编码:
version="1.0" encoding="utf-8"?>
3、Hibernate映射文件的编码:
version="1.0" encoding="utf-8"?>
4、数据源配置中jdbcurl(数据库连接)指定的编码:
如果在spring配置文件applicationContext.xml里配置,在数据源的节点中添加jdbcUrl属性如下:
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf-8
或者,如果在hibernate配置文件中,可以添加如下两个属性的配置代码:
name="connection.useUnicode">true
utf-8
5、Mysql默认字符集:
在Mysql的安装根目录下,my.ini中:
# The default character set that will be used when a new schema or table
is
# created and no character set is defined
default-character-set=utf-8
安装时,默认的字符集是latin1.
Mysql默认字符集,可以在安装时配置,也可以通过Mysql自带的MySQL Server Instance Config
Wizard重新配置,配置后重启服务才可生效。
6、数据库表字段的字符集:
MySQL对于字符集的指定可以细化到一个数据库,一张表,一列(字段),应该用什么字符集。
通过在create语句中添加character set
参数指定相应的字符集,如果不指定,则会默认使用其上一个层
级的字符集。
==============问题分析=============
那么,来分析一下,问题可能是出现在什么地方?
结合以上总结的可能出错的几个地方,我逐一进行了测试,最后发现和预想的结果一致:
通过报错信息可以看出,这个问题应该是表单提交的中文字符与Mysql本身的字符集的设置有冲突导致
的,因此排除项目中那些与页面文件相关的字符集设置。
网上有些地方说,这个问题与下面这个配置中指定的字符集相关:
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf-8
但是,经过我的验证,问题可能并不在此。
经过反复的测试验证,我确定问题就出在Mysql本身默认字符集的设置上。
通过命令: mysql> SHOW VARIABLES LIKE
'character%';
查看Mysql默认字符集的相关设置:
+--------------------------+---------------------------------+
|
Variable_name |
Value |
+--------------------------+---------------------------------+
|
character_set_client |
latin1 |
|
character_set_connection |
latin1 |
| character_set_database |
latin1 |
|
character_set_filesystem |
binary |
|
character_set_results |
latin1 |
|
character_set_server |
latin1 |
|
character_set_system |
utf8 |
|
character_sets_dir |
D:\Program Files\MySQL\MySQL Server 5.1\share\charsets\
|
+--------------------------+---------------------------------+
由于表是根据hibernate映射文件在spring容器加载启动时自动创建的,没有为数据库、表和表的字段
指定字符集,因此,创建时均使用Mysql默认的latin1字符集,而这个字符集显然根本不可能处理中文字符,
上面的报错信息就是因为它而产生的。
因此,通过修改Mysql的默认字符集或者在创建数据库、表和表的字段时指定字符集解能决这个问题。
下面,以修改Mysql的默认字符集为例说明。
为了让Mysql支持中文字符,可以把它的默认字符集设置为:
utf-8 ——支持几乎所有字符
gb2312 ——是简体中文的码
gbk ——支持简体中文及繁体中文
中的任何一个。
修改默认字符集的方法如下:
(1) 最简单的修改方法,就是修改Mysql的my.ini文件中的字符集键值,
如 default-character-set =
utf8
character_set_server = utf8
修改完后,重启mysql的服务,service mysql
restart。
使用 mysql> SHOW VARIABLES LIKE
'character%';查看,发现数据库编码均已改成utf8
+--------------------------+---------------------------------+
|
Variable_name |
Value |
+--------------------------+---------------------------------+
|
character_set_client |
utf8 |
|
character_set_connection |
utf8 |
|
character_set_database |
utf8 |
|
character_set_filesystem |
binary |
|
character_set_results |
utf8 |
|
character_set_server |
utf8 |
|
character_set_system |
utf8
mysql 1366 hy000_ERROR 1366 (HY000): Incorrect string value错误解决办法相关推荐
- Incorrect string value错误解决
创建数据库时配置 character set为:utf8mb4 collation为:utf8mb4_unicode_ci表的配置 character set为:utf8mb4 collation为: ...
- mysql:ERROR 1366: Incorrect string value:错误解决
首先排查MySQL的字符集是否为UTF-8 通过命令 mysql> show variables like '%char%'; 得到 +--------------------------+-- ...
- weiphp mysql权限_weiphp 3.0创建插件提示错误解决办法 提示您没有创建目录写入权限,...
环境 linux weiphp3.0 步骤: 创建weiphp插件的时候提示 目录不可写入 解决方法: 查看是/Admin/Plugin/create.html 这个文件提示的 找到 Applicat ...
- Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法
MySQL ERROR 1366(HY000):Incorrect string value,在往数据库中插入中文的时候会出现. 这也就是编码问题,网上大部分都是说设置下配置文件中的设置,而可悲的是在 ...
- ERROR 1366 (HY000): Incorrect string value......(Mysql报错解决)
2019.11.29更新:发现了新的解决方法 错误描述 在控制台执行插入操作的时候,Mysql报错ERROR 1366 (HY000): Incorrect string value--插入操作失败, ...
- linux mysql 1366_Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法
MySQL ERROR 1366(HY000):Incorrect string value,在往数据库中插入中文的时候会出现. 这也就是编码问题,网上大部分都是说设置下配置文件中的设置,而可悲的是在 ...
- mysql insert 1366_mysql insert中文乱码无法插入ERROR 1366 (HY000): Incorrect string value
MYSQL经典问题: (ERROR 1366 (HY000): Incorrect string value:'\xD5\xD4' for column 'name' at row 1) 网上有好多解 ...
- Mysql插入中文时提示:ERROR 1366 (HY000): Incorrect string value: '\xE5\x8F\xB0\xE5\xBC\x8F...' fo
Mysql插入数据时提示:ERROR 1366 (HY000): Incorrect string value: '\xE5\x8F\xB0\xE5\xBC\x8F-' fo 分析如下: 首先通过语句 ...
- 【MySQL】【数据库编码问题】ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xC7\xBF' for column
[MySQL]ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xC7\xBF' for column 'SNAME' at row 1 今天 ...
最新文章
- 2020薪资排名第一的专业公布,除了计算机还有这些!
- 深度学习在机器人视觉中的局限与优势(综述)
- argparse subparsers()
- Effective C++ --4 设计与声明
- 【产品】密码明文显示的必要性和解决方案
- ios11更新提示信任_iOS13.6.1正式版更新,主要修复两大问题
- 在eclipse中把项目部署到tomcat中时,发现项目文件不完整
- redis集群报Jedis does not support password protected Redis Cluster configurations异常解决办法...
- ios之最简单的程序
- 学成在线--18.新增课程(课程分类查询)
- 消息中间件—Kafka 的设计思想
- CenOS7.4内核升级修复系统漏洞
- error和warning指令
- Asp.net页面生命周期详解任我行(3)-服务器处理请求详细过程
- vmd与ovito的对比
- C专家编程第二章,c语言特性的不足
- 两变频调速电机系统的神经网络逆同步控制
- 搜狗新闻语料库 python正则表达式 新闻内容提取
- C# 实现eval,支持任意个数、任意基本类型的参数
- 【教程】公众号图文添加Word、Excel、PDF等文件