Incorrect string value: '\xE4\xB8\xAD\xE5\x9B\xBD.

背景: java

最近在作一個項目,而後你們作了好久,十分平靜。忽然今天同事輸入了一個漢字,進行保存,結果Console中打印出以下錯誤: mysql

Exception in thread "main" java.sql.SQLException: Incorrect string value: '\xE4\xB8\xAD\xE5\x9B\xBD...' for column 'aaa' at row 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2537)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2466)
	at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:735)

這段異常,似曾相識,卻一時認不出它來。不過第一個感受上就是編碼錯誤。即應用程序編碼與數據庫編碼不一致。肯定這個問題,以前我遇到過,也解決了。但一時又沒有想到怎麼解決。 linux


解決思路: sql

問題原因是數據庫中的對應字段的編碼格式與應用傳遞的數據編碼格式不一致致使。
因此,咱們須要將對應字段的編碼格式首先調整爲一致的。這樣保持了應用與數據庫之間訪問正常。 數據庫

注意 編碼

在解決這次問題中,陷入的誤區: spa

數據庫有字符編碼,表有字符編碼,字段有數據編碼。
庫映射到數據表,數據表映射到字段。主要是做爲一個默認,而對於每一個字段上的編碼是實際做用的。 code


【擴展】 server

對於由這個問題,我查詢的一些東西整理出來,以處理往後關於linux下數據庫的設置。 utf-8

1. 剛安裝好的mysql,字符配置以下:

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

咱們須要配置my.cnf下,以肯定mysql在啓動時,編碼爲utf-8

注意:mysqld下的是character-set-server,mysql下的是default-character-set,寫錯了會致使mysql沒法啓動。

[mysqld]
character-set-server=utf8

[mysql]
no-auto-rehash
default-character-set=utf8

重啓後,mysql的字符集變爲以下,

+--------------------------+----------------------------+
| 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                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

至此,調整了數據庫的默認編碼格式爲utf-8

相關文章
相關標籤/搜索