0

次の文字列があります。

\ud83d\udc57 DESTINATION OF SHOPAHOLIC\n\u260e 088216013304 \/ 085713900029\n\ud83d\udcf1 BB 328713BD\n\u2712 LINE : ladydhie\n\ud83d\udcb3 BCA \n\ud83d\udc8b KEEP CALM AND HAPPY SHOPPING!!!\ud83d\udc8b

MySQLに文字列として保存したかったのですが、これを単純に挿入すると空になります。私がしなければならない特別なことはありますか?

Symfony2 と Doctrine を ORM として使用しています。したがって、bio という列があり、文字列として格納されている User というオブジェクトがありますが、次のようなことをすると、次のようになります。

user->setBio(\ud83d\udc57 DESTINATION OF SHOPAHOLIC\n\u260e 088216013304 \/ 085713900029\n\ud83d\udcf1 BB 328713BD\n\u2712 LINE : ladydhie\n\ud83d\udcb3 BCA \n\ud83d\udc8b KEEP CALM AND HAPPY SHOPPING!!!\ud83d\udc8b) 

これにより、DBに保存されている空のバイオが得られます。これを正しく保存できるようにするにはどうすればよいですか。

4

2 に答える 2

1

テーブル列の照合順序がutf8mb4であり、MySQL 接続の照合順序が であることを確認してくださいutf8mb4

MySQL の基本utf8文字セットは、基本多言語面 (UTF-8 で 3 バイト) の文字のみをサポートします。U+1F457 DRESS のような絵文字は BMP にないため、完全な 4 バイト形式でのみ保存できます。

mysql 接続の照合順序を確認するにはどうすればよいですか?

charsetDoctrine には詳しくありませんが、pdo_mysql接続をに設定できるはずですutf8mb4my.cnfconfigdefault-character-setを に設定することもできますutf8mb4

また、上記で使用している構文が何であるかはわかりませんが、PHP には\uエスケープがありません。文字 U+1F457 を PHP 文字列に含めるには、 として直接入力し''、.php ファイルを UTF-8 として保存するか、UTF-8 バイト エンコードを含める必要があります'\xF0\x9F\x91\x97'

于 2013-09-15T14:48:45.907 に答える
-1

スティングをjson_formatに保存し、アクセス時にjson_decodeを実行することで、すべてをバイパスすることができました:)

于 2015-10-31T18:35:49.313 に答える