2017-05-07 9 views
-1

私のMySQLデータベースではutf8以外の文字を探したいのですが、通常は他の文字があります。特にユーザーがPDFファイルから入力ボックスに直接コピーするときはDB2データベースでUTF-8以外の文字を検索するにはどうすればよいですか?

私はこれを試しました。 utf8以外の文字がある場合、列は関係ありません。これを行い、UTF-8以外の文字のみをターゲットとするSQLクエリはありますか?

SELECT * FROM MyTable WHERE LENGTH(MyColumn) = CHAR_LENGTH(MyColumn) 

この

は私がした何をしたかだから私のデータベーステーブル

table name: employees 
emp_num(int) 
birth_date(date) 
first_name (varchar(15)) 
last_name (varchar(20)) 
gender (ENUM('M','F')) 
address (varchar(50)) 

ある

SELECT * FROM employees WHERE LENGTH(address) = CHAR_LENGTH(address) 
これは

enter image description here

このイメージが正しいかどう

は分からない 私のデータベースからですが、奇妙なYが出てきて、他の文字も参照してください。

+0

これはあなたが探しているものです:https://dba.stackexchange.com/questions/77101/how-to-find-non-utf8-data-in-mysql/77154 – Martin

+0

@Martin OPは何をしたの? – RiggsFolly

+0

@RiggsFolly私はその質問がどんなものなのかよく分かりません。列の内容のエンコーディングは、定義された列が何であっても(BLOBの場合を除いて) – Martin

答えて

1

Ÿは有効なutf8文字(16進数C5B8:2バイト、1文字)です。そして有効にlatin1文字(16進9f)UTF8を使用したので

、:

mysql> SELECT LENGTH('Ÿ'), CHAR_LENGTH('Ÿ'); 
+--------------+-------------------+ 
| LENGTH('Ÿ') | CHAR_LENGTH('Ÿ') | 
+--------------+-------------------+ 
|   2 |     1 | 
+--------------+-------------------+ 

ので、CHAR_LENGTHテスト対長のテスト何かではなく "非UTF8" の文字のために。

実際、「非utf8」の文字は、絵文字とutf8mb4にあるが、utf8には含まれない中国語の唯一の文字です。

しかし、多分それはあなたの意図された質問ではありませんでしたか?

あなたは列の(1)文字セット、また接続の(2)文字セットを提供していない、また(3)のテキストが言っているはず何ので、診断することができるものには限界があります。

「入力ボックス」とは何ですか?それはHTMLフィールドですか?それは持っています

<form accept-charset="UTF-8"> 

SELECT HEX(col) ...を使用して、現在のテーブルの内容を表示してください。文字が何であるかの予備的分析のためにhereの "データをテストする"を参照してください。非alphanumを検索するための

その他

WHERE col RLIKE '[^a-zA-Z0-9_ ]' 

は、文字、数字、アンダースコア、およびスペース以外の何かを持っている行が含まれます。

WHERE HEX(col) RLIKE '^(..)*[89ABCDEF]' 

は、8番目のビットがオンのバイトをチェックします。つまり、完全に7ビットASCIIではありません。

問題をより詳しく指定するか、REGEXPについて学んでください。私は "utf8"が追いかける言葉ではないと思う。上記のRLIKEslatin1のものもキャッチします。

+0

mmmを保存するために有効な文字を正しく修飾するために、データの挿入コーディングを行う必要があると思われますが、そのことはわかりませんでした。ありがとう。私の質問は、どのように私の列の非英字や数字を探す方法だろうと思う} – learningbyexample

+0

私の更新を参照してください.. –

+0

私は本当にごめんなさい@リッチジェームズ私はちょうど私のデータベースがDB2400であることがわかった – learningbyexample

関連する問題