[英]“Incorrect string value:” MySQL issue when inserting UTF8 text into a latin1 column
我在生產中有這個MySQL表,它的字符集為latin1_swedish_ci(又名latin1)。
現在,以UTF-8格式存在此傳入內容(字符串:“ \\ ud55c \\ ubc24 \\ uc758”),需要將其插入到此TEXT列字段中,稱為表中的關鍵字 。
當我嘗試執行INSERT時,出現此錯誤:
Incorrect string value: '\xED\x95\x9C\xEB\xB0\xA4...' for column 'keywords' at row 1
我在Java代碼中嘗試了各種方法,嘗試從UTF8轉換為ISO-8859-1,如下所示,但我仍然遇到相同的錯誤:
String convertedString = new String(originalString.getBytes("UTF-8"), "ISO-8859-1");
我知道StackOverflow上有解決方案,其中提到將MySQL表的字符集從latin1更改為UTF8,但不幸的是我無法做到這一點,因為這是一個實時生產的MySQL主服務器,並且歷史上一直在使用latin1。
有人對解決此“字符串值不正確”錯誤有任何建議嗎?
謝謝IS
除非utf8字符串中的字符也恰好在latin1中具有表示形式,並且latin1是一個很小的單字節字符集(總共少於256個字符),否則您將嘗試做的事情根本不可能實現,因此絕大多數有效的utf8字符都沒有等效的latin1表示形式。
您不能在該列的字符集不支持的列中存儲任何字符。 這不是從一個“轉換”到另一個的問題。
如果需要unicode,則至少需要utf8列,並且修改表是唯一的選擇。 否則嘗試就像在無符號整數列中存儲負數一樣。 無符號的整數不能為負-這與轉換無關。
對於任何支持字符數據類型的RDBMS都是如此,而不是特定於MySQL的限制。
한밤
是한밤
-在某個階段它被轉換為latin1。 但是\한\밤
是Unicode。 Python處於哪種模式? 一開始有這個嗎?
# -*- coding: utf-8 -*-
更多
utf8是首選; euckr是可能的。 但是...問題不在於挑選字符集,而是在於在整個應用程序中指定該字符集的一致性。
您在使用Python嗎? 它被標記為Java嗎?
對於Java / JDBC,在getConnection()調用中需要?useUnicode=yes&characterEncoding=UTF-8
。
您需要這些:
ED959C
十六進制。 (utf8中的韓文字符均為3個字節。) SET NAMES utf8
是另一種方法。 CHARACTER SET utf8
。 <meta charset=UTF-8>
。 對於韓語, utf8mb4
和utf8
一樣好。 檢查上面的4個項目符號,並向我們“證明”您正在做所有這些項目。
對於JSP和Java Servlet,需要略有不同的建議 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.