Mysql

在 mysql 中查找非 UTF-8 數據

  • January 12, 2022

我有一個 MySQL 數據庫,其中包含我們客戶輸入的數據。

客戶被告知他們的數據只能編碼為 UTF-8,但目前尚未強制執行,有些人正在使用未以 UTF-8 編碼的字元。

我們打算添加一些檢查,但是我們應該如何檢測未使用 UTF-8 編碼的數據?是否有 SQL 或 MySQL 查詢(或管理命令)可以顯示未編碼為 UTF-8 的數據?

您可以通過將字節長度與列上的字元長度進行比較來檢查(非)UTF-8 數據是否存在,例如:

SELECT * FROM MyTable
WHERE LENGTH(MyColumn) <> CHAR_LENGTH(MyColumn)

多字節字元將具有更大的LENGTH(字節),因此您需要查找不滿足該條件的位置。

請注意,MySQL 的utf8字元集不是真正的 Unicode UTF-8,因為它只支持每個字元最多 3 個字節。如果您的 MySQL 晚於 5.5.3,您可以使用utf8mb4每個字元獲取 4 個字節。

引用自:https://dba.stackexchange.com/questions/77101