strange character encoding of stored data , old script is showing them fine new one doesn't

前端 未结 2 1300
心在旅途
心在旅途 2020-11-22 15:44

I\'m trying to rewrite an old website .
it\'s in persian which uses perso/arabic characters .

CREATE DATABASE `db         


        
2条回答
  •  天涯浪人
    2020-11-22 16:18

    The deceze's answer is excellent but I can add some info that may help to handle lots of records without test them manually.

    If the conversion CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) fails, it print NULL instead of the field_name content.

    So I use this one to find those record:

    SELECT IFNULL(
        CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8)
        , '**************************************************')
    FROM table_name
    

    or this one:

    SELECT id, field_name, CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8)
    FROM table_name
    WHERE CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8) IS NULL
    

    And the UPDATE with the clause to affect only records on which the conversion success:

    UPDATE table_name
    SET
    field_name = CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8mb4 )
    WHERE
    CONVERT(BINARY CONVERT(field_name USING latin1) USING utf8mb4) IS NOT NULL
    

提交回复
热议问题