6

MySQL で Unicode 文字リテラルを指定する方法はありますか?

次のような Unicode 文字を Ascii 文字に置き換えたい:

Update MyTbl Set MyFld = Replace(MyFld, "ẏ", "y")

しかし、ほとんどのフォントでは使用できないさらにあいまいな文字を使用しているため、次のような Unicode 文字リテラルを使用できるようにしたいと考えています。

Update MyTbl Set MyFld = Replace(MyFld, "\u1e8f", "y")

この SQL ステートメントは PHP スクリプトから呼び出されています。最初のフォームは判読できないだけでなく、実際には機能しません。

4

5 に答える 5

5

、、またはを使用して、 16 進数リテラル(またはバイナリ リテラル) を指定できます。0xx''X''

select  0xC2A2;
select x'C2A2';
select X'C2A2';

ただし、戻り値の型はバイナリ文字列であるため、すべてのバイトが文字と見なされることに注意してください。これは次の方法で確認できますchar_length

select char_length(0xC2A2)

2

代わりにUTF-8文字列が必要な場合は、次を使用する必要がありますconvert

select convert(0xC2A2 using utf8mb4)

C2 A2UTF-8 では 1 文字と見なされることがわかります。

select char_length(convert(0xC2A2 using utf8mb4))

1


convertまた、無効なバイトは自動的に削除されるため、心配する必要はありません。

select char_length(convert(0xC1A2 using utf8mb4))

0

ご覧のとおり、出力は無効な UTF-8 バイト シーケンスである0ためです。C1 A2

于 2015-01-26T17:41:21.143 に答える
3

hexおよびunhex関数を使用できます。例:

update mytable set myfield = unhex(replace(hex(myfield),'C383','C3'))
于 2010-11-23T14:02:35.490 に答える
3

ご提案いただきありがとうございますが、問題はシステムのさらに奥にあったと思います。

選択を解除するレベルはたくさんありますが、私が知る限り、(少なくともこのサーバーでは) コマンド

set names utf8

utf-8 処理が正しく機能するようにしますが、

set character set utf8

しません。

私の環境では、これらは PDO を使用して PHP から呼び出されているため、どのような違いが生じる可能性があります。

とにかくありがとう!

于 2010-11-29T18:43:50.080 に答える
0

MySQL 文字列構文はここで指定されています。ご覧のとおり、数値のエスケープ シーケンスは用意されていません。

ただし、SQL を PHP に埋め込んでいるため、PHP で正しいバイトを計算できます。SQL に入れるバイトが実際にクライアントの文字セットと一致していることを確認してください。

于 2010-11-23T14:00:15.360 に答える
0

必要なもの (バイト番号と文字セット名を提供) を許可し、文字を取得するchar関数もあります。

于 2011-03-10T13:04:21.277 に答える