iT邦幫忙

0

mysql中文字 cp1252轉utf8亂碼問題

使用以下查詢的時候可以成功將亂碼轉成中文
SELECT user_name,convert(unhex(hex(convert(user_name using latin1))) using utf8) as user_name from 測試.dbCRMSalesDetail;

但是使用以下update要更改欄位的編碼卻會出現
“Error Code: 1300. Invalid utf8 character string: 'E6'“

UPDATE 測試.dbCRMSalesDetail set user_name= convert(unhex(hex(convert(user_name using latin1))) using utf8);

以上update方法在同一表格的另外一欄有成功轉換,兩個欄位datatype:VARCHAR(256)/charset:utf8都是一樣的設定,但不知道為何這一欄會出現error?

1 個回答

1
淺水員
iT邦研究生 4 級 ‧ 2020-08-05 18:01:42

狀況一:

user_name 設定 值(範例)
原來 VARCHAR(256) charset latin1 測試
希望變成 VARCHAR(256) charset utf8 測試
ALTER TABLE 測試.dbCRMSalesDetail MODIFY `user_name` varchar(256) CHARSET binary
ALTER TABLE 測試.dbCRMSalesDetail MODIFY `user_name` varchar(256) CHARSET utf8mb4

狀況二:

user_name 設定 值(範例)
原來 VARCHAR(256) charset utf8 測試
希望變成 VARCHAR(256) charset utf8 測試
UPDATE 測試.dbCRMSalesDetail SET `user_name`=BINARY(CONVERT(`user_name` USING latin1));
看更多先前的回應...收起先前的回應...
dddd261 iT邦新手 5 級 ‧ 2020-08-06 12:19:11 檢舉

目前的問題是狀況二,先感謝回覆,操作後但還是出現以下問題
Error Code: 1366. Incorrect string value: '\xE6' for column 'user_name' at row 3643

淺水員 iT邦研究生 4 級 ‧ 2020-08-06 12:30:39 檢舉

看看能不能把那錯誤那筆資料的 HEX 貼上來看看,也許資料有壞掉

SELECT HEX(`user_name`) FROM 測試.dbCRMSalesDetail WHERE ...(略)
dddd261 iT邦新手 5 級 ‧ 2020-08-06 17:08:30 檢舉

C3A5C2ADC2ABC3A5C593E280B9C3A5C29DE280A1

淺水員 iT邦研究生 4 級 ‧ 2020-08-06 17:40:49 檢舉

C3A5C2ADC2ABC3A5C593E280B9C3A5C29DE280A1

我這邊測試不會出現問題呢,可以正常轉成人名

dddd261 iT邦新手 5 級 ‧ 2020-08-06 21:37:24 檢舉

我這裡還是無法轉成功,看來無解了/images/emoticon/emoticon02.gif

我要發表回答

立即登入回答