使用以下查詢的時候可以成功將亂碼轉成中文
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?
狀況一:
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));
目前的問題是狀況二,先感謝回覆,操作後但還是出現以下問題
Error Code: 1366. Incorrect string value: '\xE6' for column 'user_name' at row 3643
看看能不能把那錯誤那筆資料的 HEX 貼上來看看,也許資料有壞掉
SELECT HEX(`user_name`) FROM 測試.dbCRMSalesDetail WHERE ...(略)