2010-11-23 14 views
6

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

私はASCII文字は、以下のようなものでUnicode文字を置き換えたい:

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

しかし、私はほとんどのフォントでは使用できません、さらにあいまいな文字を使用していますので、私はなりたいです最初の形式ではないだけで読めないですが、それは実際には動作しません! - このSQL文は、PHPスクリプトから呼び出されている、

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

のようなものをUnicode文字リテラルを使用することができ

答えて

3

感謝をhexunhex機能を使用することができますが、私はこの問題は、さらにバックシステムでだったと思います。

あり選択解除するレベルの多くは、ですが、私の知る限り、コマンド

set names utf8 

(このサーバ少なくとも上)

set character set utf8 
一方で、正しくUTF-8のハンドリング作業を行い

はありません。

私の環境では、これらはPDOを使用してPHPから呼び出されていますが、その違いがあります。

ありがとうございました!

0

MySQLの文字列構文はhereと指定されていますが、わかるように数値エスケープシーケンスはありません。

しかし、PHPでSQLを埋め込むと、PHPで正しいバイトを計算できます。 SQLに入れたバイトが実際にclient character setと一致することを確認してください。

2

あなたは:例えば、ご提案のための

update mytable set myfield = unhex(replace(hex(myfield),'C383','C3')) 
0

また、char functionがあります。これは、バイト番号と文字セット名を指定して、charを得ることができます。

3

あなたは0xx''、またはX''を使用してhexadecimal literals(あるいはbinary literals)を指定することができます。

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

しかし、戻り値の型がバイナリ文字列であるので、それぞれ、すべてのバイトが考慮されていることを注意してくださいキャラクター。

select convert(0xC2A2 using utf8mb4) 

そして、我々はC2 A2があることを見ることができます:あなたはUTF-8文字列をしたい場合は代わりに、あなたはconvertを使用する必要が

select char_length(0xC2A2) 

2

:あなたはchar_lengthでこれを確認することができますUTF-8で1文字とみなされる:

select char_length(convert(0xC2A2 using utf8mb4)) 

1


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

select char_length(convert(0xC1A2 using utf8mb4)) 

0

が無効なUTF-8バイトシーケンスであるため、出力は0です。