簡體   English   中英

“不正確的字符串值:”將UTF8文本插入到latin1列中時,MySQL問題

[英]“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 -*- 

更多Python檢查清單

更多

utf8是首選; euckr是可能的。 但是...問題不在於挑選字符集,而是在於在整個應用程序中指定該字符集的一致性。

您在使用Python嗎? 它被標記為Java嗎?

對於Java / JDBC,在getConnection()調用中需要?useUnicode=yes&characterEncoding=UTF-8

您需要這些:

  • 客戶端中的字節必須是utf8,例如ED959C十六進制。 (utf8中的韓文字符均為3個字節。)
  • 客戶端和服務器之間的連接需要為utf8。 連接后立即執行SET NAMES utf8是另一種方法。
  • 列/表必須是CHARACTER SET utf8
  • 如果您使用的是html,則需要<meta charset=UTF-8>

對於韓語, utf8mb4utf8一樣好。 檢查上面的4個項目符號,並向我們“證明”您正在做所有這些項目。

對於JSP和Java Servlet,需要略有不同的建議

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM