2016-07-15 6 views
1

が、私はUTF-8に私の接続文字セットを設定していますINSERT値は、SET NAMES、SET CHARACTER SETでエンコードされていますか? MySQLを使用し

SET NAMES 'utf8mb4'; 
SET CHARACTER SET 'utf8mb4'; 

私もlatin1_swedish_ci照合を持つテーブルに対して、UTF-8など、すべてを取り戻すだと道を(ほとんどありません)。

UTF-8 INSERT文字列を送信しているときに、latin1テーブルの1つに挿入すると、値はlatin1にエンコードされますか?

答えて

1

最初の設定: 'charset'にプログラミング言語固有の接続パラメータを使用します。

第2優先度:SET NAMES utf8mb4; - (引用符は不要です)。

欄/表のCHARACTER SETは、この接続のとは独立してです。SET NAMESです。

接続/ SET NAMESは、クライアントのバイトに使用されるエンコードを宣言します。 INSERT/SELECTはそれとカラム/テーブル宣言の間で変換を行います。したがって、あなたのutf8-latin1の観察結果を変換します。

"UTF-8 INSERT文字列を送信すると、latin1テーブルの1つに挿入すると、値はlatin1にエンコードされますか?" - 繰り返しますが、送信するバイトはSET NAMESに従う必要があります。可能であれば、テーブル内のlatin1に正しく変換されます。 latin1は非常に限られた文字セット(西ヨーロッパだけで十分です)を扱うので、中国語、絵文字などをlatin1に変換できないため、「可能ならば」と言います。

関連する問題