sql >> データベース >  >> RDS >> Mysql

Latin1でエンコードされた列でUTF-8文字を検出する方法-MySQL

    タイムゾーンと同様に、文字エンコードは常に問題の原因です。

    LATIN1アクセント付き文字または記号、あるいはUTF-8マルチバイト文字の最初の文字である「high-ASCII」文字を探すことができます。少し騙さない限り、違いを見分けるのは簡単ではありません。

    どのエンコーディングが正しいかを判断するには、SELECTするだけです。 2つの異なるバージョンと視覚的に比較します。次に例を示します:

    SELECT CONVERT(CONVERT(name USING BINARY) USING latin1) AS latin1, 
           CONVERT(CONVERT(name USING BINARY) USING utf8) AS utf8 
    FROM users 
    WHERE CONVERT(name USING BINARY) RLIKE CONCAT('[', UNHEX('80'), '-', UNHEX('FF'), ']')
    

    MySQLの正規表現エンジンは\x80のようなものを無視しているように見えるため、これは非常に複雑になります。 UNHEX()を使用する必要があります 代わりにメソッド。

    これにより、次のような結果が得られます:

    latin1                utf8
    ----------------------------------------
    Björn                Björn
    


    1. MariaDBのMIN()関数

    2. Oracleデータベースで例外変数を使用してユーザー定義の例外を宣言する方法

    3. OracleSQL-順次値の範囲を特定する

    4. SQLServerで一重引用符を置き換えます