0

MariaDB をデフォルトの文字セット UTF-8 に設定しました。Blue Box Blog Character Set Hellによると、「é」などの認識されないアクセント付き文字から問題を解決してくれる設定です。

ただし、一部の結果を取得できません

SELECT title FROM tablename WHERE title = 'sometext'

一部のテキストにアクセント付きの文字が必要ない場合。

utf8 文字セットを処理するための独自のアプローチはありますか? Javaで文字列を認識していないように見えるからです。

Java コードで

String query = "SELECT title FROM tablename WHERE title=?";

PreparedStatement pState = conn.getPreparedStatement(query);
ResultSet result;
String textResult = null;

pState.setString(1, "sométéxt");
result = pState.executeQuery();

if(result.next())
  textResult= result.getString(1);

System.out.println(textResult);

出力:

null

その他のアプローチ

1)

String query = "SELECT title FROM tablename WHERE CONVERT(title USING utf8)=?";

2)

String query = "SELECT title FROM tablename WHERE title=?";

byte[] req = "sométéxt".getBytes("UTF-8");
pState.setBytes(1,req);

出力

null

Char Set=utf8 の前に直面した問題

Character Set=utf8 の前は、データベースの最初のセットアップはデフォルトの Character Set である latin1_swedish_ci を使用していました。私のフィールド 'tablename' datatype= VARBINARY () を使用すると、認識されないアクセント付きを解決できます

SELECT * FROM tablename WHERE CONVERT(title USING utf8) = 'sometext'

ただし、データベースには 1,000 万行を超える行があるためです。「タイトル」フィールド全体でCONVERT関数を使用すると、SQL クエリと Java プログラムの実行が非常に遅くなります。

4

2 に答える 2

2

文字セットの選択によって、テキスト情報の保存方法が決まります。ただし、WHERE 句がその情報とどのように一致するかを決定するのは、照合の選択です。

試す

  SELECT title FROM tablename WHERE title=? COLLATE utf8_general_ci

それが機能する場合 - 必要な行を取得し始めた場合 - tablename テーブルのタイトル列を次のように変更します

   ALTER TABLE tablename1 
   CHANGE title title VARCHAR(xxxx) CHARACTER SET utf8 COLLATE utf8_general_ci NULL 

実際には、タイトル列の既存の定義を使用して、COLLATE utf8_general_ci句を挿入する必要があります。この変更を行ったら、インデックスを再構築する必要がある場合があります。しかし、いずれにせよ、マッチングは正しく機能し始めます

特定の言語で作業している場合は、独自の照合順序を採用することができます。たとえば、一般的な照合では N と Ñ は同じ文字として扱われますが、スペイン語ではそうではありません。

于 2013-06-21T03:17:24.370 に答える