mysql 1366 hy000_ERROR 1366 (HY000): Incorrect string value错误解决办法
本文地址:http://www.dutycode.com/post-5.html
除非注明,文章均為 www.dutycode.com 原創(chuàng),歡迎轉(zhuǎn)載!轉(zhuǎn)載請(qǐng)注明本文地址,謝謝。
錯(cuò)誤詳情如上圖:
原因主要是:字符集的問題
解決辦法,將數(shù)據(jù)庫(kù)、數(shù)據(jù)表以及數(shù)據(jù)表中的字段全部統(tǒng)一設(shè)置成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
在一個(gè)用Struts + Spring+ Hibernate +
Mysql架構(gòu)的的項(xiàng)目里,通過前臺(tái)表單向后臺(tái)MySql數(shù)據(jù)庫(kù)添加
數(shù)據(jù),當(dāng)遇到提交中文信息的時(shí)候,問題總是比較多,我見過的出錯(cuò)的情況有兩種:
1)錯(cuò)誤情況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)錯(cuò)誤情況2:
提交時(shí)不報(bào)錯(cuò),但是數(shù)據(jù)庫(kù)中插入的中文顯示為如“???”的亂碼,同時(shí)在控制臺(tái)打印的也是“???”的亂碼字符。
因此涉及到中文字符的問題時(shí),要格外注意“字符集編碼”的問題。
====================
總結(jié)一下,在這樣一個(gè)項(xiàng)目里,涉及到設(shè)置字符集的地方有:
1、JSP頁(yè)面文件的編碼:
pageEncoding="utf-8"%>
2、Struts、Spring配置文件(XML)的編碼:
version="1.0" encoding="utf-8"?>
3、Hibernate映射文件的編碼:
version="1.0" encoding="utf-8"?>
4、數(shù)據(jù)源配置中jdbcurl(數(shù)據(jù)庫(kù)連接)指定的編碼:
如果在spring配置文件applicationContext.xml里配置,在數(shù)據(jù)源的節(jié)點(diǎn)中添加jdbcUrl屬性如下:
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf-8
或者,如果在hibernate配置文件中,可以添加如下兩個(gè)屬性的配置代碼:
name="connection.useUnicode">true
utf-8
5、Mysql默認(rèn)字符集:
在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
安裝時(shí),默認(rèn)的字符集是latin1.
Mysql默認(rèn)字符集,可以在安裝時(shí)配置,也可以通過Mysql自帶的MySQL Server Instance Config
Wizard重新配置,配置后重啟服務(wù)才可生效。
6、數(shù)據(jù)庫(kù)表字段的字符集:
MySQL對(duì)于字符集的指定可以細(xì)化到一個(gè)數(shù)據(jù)庫(kù),一張表,一列(字段),應(yīng)該用什么字符集。
通過在create語(yǔ)句中添加character set
參數(shù)指定相應(yīng)的字符集,如果不指定,則會(huì)默認(rèn)使用其上一個(gè)層
級(jí)的字符集。
==============問題分析=============
那么,來分析一下,問題可能是出現(xiàn)在什么地方?
結(jié)合以上總結(jié)的可能出錯(cuò)的幾個(gè)地方,我逐一進(jìn)行了測(cè)試,最后發(fā)現(xiàn)和預(yù)想的結(jié)果一致:
通過報(bào)錯(cuò)信息可以看出,這個(gè)問題應(yīng)該是表單提交的中文字符與Mysql本身的字符集的設(shè)置有沖突導(dǎo)致
的,因此排除項(xiàng)目中那些與頁(yè)面文件相關(guān)的字符集設(shè)置。
網(wǎng)上有些地方說,這個(gè)問題與下面這個(gè)配置中指定的字符集相關(guān):
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf-8
但是,經(jīng)過我的驗(yàn)證,問題可能并不在此。
經(jīng)過反復(fù)的測(cè)試驗(yàn)證,我確定問題就出在Mysql本身默認(rèn)字符集的設(shè)置上。
通過命令: mysql> SHOW VARIABLES LIKE
'character%';
查看Mysql默認(rèn)字符集的相關(guān)設(shè)置:
+--------------------------+---------------------------------+
|
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\
|
+--------------------------+---------------------------------+
由于表是根據(jù)hibernate映射文件在spring容器加載啟動(dòng)時(shí)自動(dòng)創(chuàng)建的,沒有為數(shù)據(jù)庫(kù)、表和表的字段
指定字符集,因此,創(chuàng)建時(shí)均使用Mysql默認(rèn)的latin1字符集,而這個(gè)字符集顯然根本不可能處理中文字符,
上面的報(bào)錯(cuò)信息就是因?yàn)樗a(chǎn)生的。
因此,通過修改Mysql的默認(rèn)字符集或者在創(chuàng)建數(shù)據(jù)庫(kù)、表和表的字段時(shí)指定字符集解能決這個(gè)問題。
下面,以修改Mysql的默認(rèn)字符集為例說明。
為了讓Mysql支持中文字符,可以把它的默認(rèn)字符集設(shè)置為:
utf-8?——支持幾乎所有字符
gb2312 ——是簡(jiǎn)體中文的碼
gbk?——支持簡(jiǎn)體中文及繁體中文
中的任何一個(gè)。
修改默認(rèn)字符集的方法如下:
(1) 最簡(jiǎn)單的修改方法,就是修改Mysql的my.ini文件中的字符集鍵值,
如?default-character-set =
utf8
character_set_server = utf8
修改完后,重啟mysql的服務(wù),service mysql
restart。
使用 mysql> SHOW VARIABLES LIKE
'character%';查看,發(fā)現(xiàn)數(shù)據(jù)庫(kù)編碼均已改成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
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的mysql 1366 hy000_ERROR 1366 (HY000): Incorrect string value错误解决办法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库技术mysql能干什么_MySQL
- 下一篇: java闭锁_java8中CountDo