問題タブ [collation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java で MySQL 照合を使用する
短縮版
私は現在、MySQL の照合に関する問題と、それが一連の値にどのように影響するかを調査しています (これは Hibernate を使用してマップされますが、今のところ問題にはなりません)。MySQL が使用するのと同じ照合順序を使用して文字列のセットが必要です。たとえば、「foobar」と「fööbar」は等しいと見なされますが、「foo bar」と「foobar」は異なると見なされます。デフォルトのCollator.getInstance()を ( Collator.PRIMARY強度で) 使用しても、まだ違いがあるため (最も顕著な空白)、確実には機能しません。では、可能なすべての文字列に対して MySQL と同じように動作する Collator を取得するにはどうすればよいでしょうか?
ロングバージョン
セットの値を格納するテーブルに一意のインデックスを作成し、セットが DB で許可されている値のみを保持するようにし、その逆も同様にしたいと考えています。
表は次のようになります。
ここで、プレーンな文字列と HashSet を使用して値を保持すると、たとえば次のようになります。
「foobar」と「fööbar」の両方を値のセットに追加することができます。Hibernate が Set を DB にフラッシュすると、MySQL は、定義された「entity-value」キーの「foobar」と「fööbar」が重複していると文句を言います。したがって、文字列をラップし、Collatorを使用して文字列が等しいかどうかをチェックすると考えました。
これは、「foobar」と「fööbar」でうまく機能します。
ただし、MySQL が異なると見なす "foo bar" と "foobar" では機能しません。
基本的に、あとはgetCollator()メソッドを実装するだけです。
サンプルの完全なコードを入手できます:ダウンロード
php - php と mysqli を使用して mysql データベースに保存する
データをデータベースに保存しようとしているのですが、今までに見たことのないエラーが表示されます。これは db 照合に関係があると思いますが、何が問題なのかわかりません。
クエリは次のとおりです。
私が得るエラーメッセージは次のとおりです。
SQL 構文にエラーがあります。1行目の「://www.something/here/here/here/12345,httpwwwsomthighhere」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください
このフィールドのデータベース照合は utf8-general-ci で、フィールド タイプは varchar 255 です。
それに関するアイデアはありますか?
database - 複数のDBMSで機能するハイバネートの大文字と小文字を区別しないutf-8/unicode照合
複数のデータベースエンジンで機能するunicode/utf-8 /locale-independentの方法で機能する大文字と小文字を区別しない文字列としてテーブル列を指定できるHibernateアノテーションまたは.hbm.xmlを探しています。
そのようなことはありますか?
Restrictions.eq("column_name", "search_string")
効率よく使ってクエリができるように。
sql - SQL Server: T-SQL 命令に対する列照合の影響
サーバーによっては、TSQL コマンドで大文字と小文字が区別されることがわかりました (*) tableId
。
列の照合に応じて。SQL_Latin1_blablabla
大文字と小文字が区別されないようLatin1_blablabla
です。
だから私の最初の質問はなぜですか!!!
2 つ目は、データベース内の関連するすべての列のすべての照合順序を変更するための最も速いトリック (sp?) は何ですか?
編集:物事を非常に明確にするために:
その間、すべてのサーバーで作業します
SQL_Latin_blablabla
照合のあるサーバーでのみ機能します。2 つの弦の違いに注目してください。ここではデータの照合についてではなく、この照合がコードの記述方法に与える影響について説明します。
(*) ここで、この「発見」後の私の心の状態を修飾するために、いくつかの追加の具体的な単語を使用できますが、それらはすべて成人向けです...
sql-server - 操作 SQL Server 2000 と等しい場合の照合の競合
ライブで送信するために実行しようとしているストアド プロシージャに照合の競合があります...ここで説明されています
SQL Server 2000 DTS - equal to 操作の照合順序の競合を解決できません
すべての問題の隣に COLLATE database_default を記述せずに問題を修正する方法はありますか? または、照合タグを事前に作成するスクリプトを生成するときに、いくつかのオプションがあるのでしょうか?
sql-server - 特殊文字を許可する SQL Server 2008
SQL Server 2008 Express Edition を使用しており、その照合設定はデフォルトに設定されています。データベースに á 、â 、ã 、å 、ā 、ă 、ą 、ǻ などの特殊文字を保存したいのですが、次のような通常の文字に変換されます。 「あ」。SQL Server がそうしないようにするにはどうすればよいですか?
sql - t-sql での nvarchar 変数のキャスト照合
nvarchar 変数の照合順序を変更する必要があります。ドキュメントによる:
(...) 3. COLLATE 句は複数のレベルで指定できます。これらには次のものが含まれます。
式の照合のキャスト。COLLATE 句を使用して、文字式を特定の照合に適用できます。文字リテラルと変数には、現在のデータベースのデフォルトの照合順序が割り当てられます。列参照には、列の定義照合が割り当てられます。式の照合については、「照合の優先順位 (Transact-SQL)」を参照してください。
ただし、この目的で CAST()、CONVERT()、または DECLARE を使用した変数宣言を使用するための正しい構文がわかりません。
perl - Perlの「標準の文字列比較順序」とは何ですか?
これは本当に二重の質問です。私の2つの最終目標には、次の答えがあります。
- メカニズムの観点から、標準の文字列比較順序は何ですか?
- ドキュメントを更新できるようにするためのより良い名前は何ですか?
ソートに関するPerlのドキュメントには、ブロックなしでsort
「標準の文字列比較順序」を使用すると記載されています。しかし、その順序は何ですか?それにはもっと良い名前があるはずです。この質問では、ロケールがそれ自体の順序を定義するため、ロケールが有効になっていない状況を具体的に意味します。
過去数年間、私たちは通常、標準のソート順を「ASCIIbetically」と呼んでいました。それはLearningPerlや他の多くの本にあります。ただし、その期間は日付が付けられています。Perlは5.6以降Unicodeに対応しています。ASCIIについて話すのは昔ながらのことです。PerlもUnicodeに対応しているため、文字列を認識しています。sv.cでは、、、およびUTF-8についてPerl_sv_cmp
知っています。最初の2つは簡単です。しかし、私は3番目について自信がありません。locale
bytes
PerlがUTF-8を使用してソートする場合、実際には何をソートしますか?文字列がエンコードするバイト、文字列が表す文字(おそらくマークを含む?)、または他の何か?これはsv.cの関連行(コミット7844ec1の6698行)だと思います。
私がその権利を読んでいる場合(私のさびたCを使用して)、pv1
オクテットに強制され、UTF-8に変換され、次に文字に強制されます(Cの意味で)。これは、UTF-8エンコーディング(つまり、UTF-8がコードポイントを表すために使用する実際のバイト)でソートしていることを意味すると思います。別の言い方をすれば、それは書記素でソートされないということです。私はこれを正しく読んでいるとほぼ確信していると思いますが、あなた方の何人かは私よりもこれについてもっとよく知っています。
それから、次の興味深い行は6708です。
かつては強制されていたとがpv1
、強制されているため、バイトごとに比較されているように見えます。これは、私がこれまでに読んださまざまなドキュメントに基づいてビットを比較しているように見える、で何が起こるのでしょうか?繰り返しになりますが、Unicode正規化ステップのように、bytes-> utf8->char->bytesからの移動で何が欠けているのか疑問に思っています。utf8.cでチェックアウトしても、その質問に答えることはできませんでした。pv2
char *
void *
memcmp
Perl_bytes_to_utf8
ちなみに、これはUnicode照合アルゴリズムと同じものかどうか疑問に思っていますか?もしそうなら、なぜUnicode :: Collateが存在するのですか?sort
見た目からすると、Perlが標準的な同等性を処理しているとは思いません。
mysql - MySQL テーブルを Latin1 から UTF8 に変換するときに欠落している情報を照合します
次のような既存のテーブルを変換しています。
次のコマンドを使用して utf8 にします。
これは問題ないようですが、結果のテーブルには照合情報が含まれていません。
私の質問は、欠落している照合情報が問題になるのでしょうか? 私はグーグルを検索しましたが、これについての言及はどこにも見つかりませんでした。照合フラグの私の理解はかなり基本的です(文字列関数の文字を比較するときに何らかの形で重要だと思いますか?)
ありがとう
nhibernate - 流暢な nhibernate 照合競合
この問題を解決するのに本当に苦労しています。nhibernate を使用する 2 つの異なるデータベースから 2 つの異なるテーブルを結合しようとしていますが、照合競合エラーが発生します。
この問題を解決するには、SQL 文字列の末尾に「collate Latin1_General_CI_AS」を追加する必要があることはわかっていますが、nhibernate を使用してそれを行う方法がわかりません。
エラー:
しばらくの間、本当の喜びなしに解決策を探してきました。単純な構成変更になる気がします。IQuery 内の文字列関数をオーバーライドして、SQL の末尾に「collate Latin1_General_CI_AS」を追加できるのではないかと考えましたが、明らかなものは見つかりませんでした。
nhibernate が失敗する sql は ms sql 2005 管理スタジオで失敗しますが、照合を追加すると実行され、結果が返されます。
どんな助けでも大歓迎です。
たくさんの愛 c