ERROR 1366 (HY000): Incorrect string value:
此种乱码解决方案如下:
首先,设置自己数据库的编码统一:
Connection
id: 81
Current database:
Current
user: root@localhost
SSL: Not in use
Using
delimiter: ;
Server
version: 5.0.67-community-nt MySQL Community Edition (GPL)
Protocol
version: 10
Connection: localhost via TCP/IP
Server
characterset: gbk
Db characterset: gbk
Client
characterset: gbk
Conn. characterset: gbk
TCP
port: 3306
随后到自己的表里面:
如我的这个表:content 表
+---------+-------------+------+-----+---------+----------------+
| Field |
Type | Null | Key | Default |
Extra |
+---------+-------------+------+-----+---------+----------------+
|
id |
int(11) | NO | PRI |
NULL |
auto_increment |
|
ad | smallint(6) | NO | |
0 | |
| title |
char(30) |
YES | | NULL | |
| author | varchar(30) | YES | | NULL | |
| content |
text | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
mysql> insert into content(title,author,content)
values('插入成','修改于','文字符');
立刻报错:
ERROR 1366 (HY000): Incorrect string value:
'\xD0\xDE\xB8\xC4\xD3\xDA' for colum
n 'author' at row 1
mysql> insert into content(title,author,content)
values('插入成','修改于','文字
符');
ERROR 1366 (HY000): Incorrect string value:
'\xD0\xDE\xB8\xC4\xD3\xDA' for colum
n 'author' at row 1
想招吧,哎:以下是解决方案:
mysql> alter tablecontentmodifyauthor
varchar(30)character
setgbk;
对,就是这一句代码。很实用的,将表里面的所有列都进行一次这样的“洗礼”,大功告成!
----
不,还没完,页面需要声明用GBK或者GB2312编码,而且在页面需要进行转码:
String content1 = new
String(request.getParameter("content1").getBytes("ISO-8859-1"));
页面读取不需要转码,写入需要转码
----------------------------------------------------------------------------------------------------------------------------------------
将带有中文的数据插入通过java程序插入到表中,中文出现了乱码. 一开始以为是客户端连接时的字符编码不对.
1. 便将hibernate的datasource的URL改为如下:
?useUnicode=true&characterEncoding=gbk"
/>(红色部分为修改后代码.) . 修改后,执行添加操作, 中文还是变成了???.
2. 执行以上方之后发现报另一个错误: ERROR 1366 (HY000): Incorrect
string value: '/xE0/xFC/xB8/xS4/xG3/xDA' for colum
n 'province' at row 1
于是修改数据库的配置文件:
mysql安装目录下面的my.ini文件 : default-character-set=gbk
character-set-server=gbk
data/performance_schema目录下的:
db.opt文件: default-character-set=gbk
default-ollation=gbk_chinese_ci
修改完成之后重启MYSQL服务器. 但又出现了 ????
.
3. 方法二操作失败, 便认为是数据库本身字符编码设置的问题:
使用命令查看数据库的字符编码: mysql> show variables like 'char%';
+--------------------------+----------------------------------------------------
-----+
|
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.5/share/chars
ets/ |
+--------------------------+----------------------------------------------------
-----+
发现数据库的编码为: latin1(MYSQL默认字符编码);
将MYSQL数据库同一设置成: gbk格式, 命令如下:
MYSQL>set character_set_client = 'gbk' ;
MYSQL>set character_set_connection = 'gbk' ;
MYSQL>set character_set_results= 'gbk' ;
MYSQL>set character_set_server= 'gbk' ;
完成之后,执行mysql> show variables like 'char%';
+--------------------------+----------------------------------------------------
-----+
|
Variable_name | Value
|
+--------------------------+----------------------------------------------------
-----+
|
character_set_client | gbk
|
| character_set_connection | gbk
|
| character_set_database |
gbk
|
| character_set_filesystem | binary
|
|
character_set_results | gbk
|
|
character_set_server | gbk
|
|
character_set_system | utf8
|
|
character_sets_dir | D:/Program Files/MySQL/MySQL Server 5.5/share/chars
ets/ |
然后修改对应的数据表的字符编码: alter
table map_datamodifyprovincevarchar(32)character
setgbk;
完成以上步骤之后.终于OK啦.
总结以上步骤:
1.设置客户端地连接编码格式. (命令: set names 'gbk')
2. 修改数据库的配置文件
3. 使用命令统一一下数据库的字符编码.