MySLQ で UPDATA および INSERT データを使用する場合、データに ?、?、? などの絵文字アイコンが含まれていると、更新または挿入が失敗し、エラーが発生しやすくなります。
Error: ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF0\x9F\x91\xBD\xF0\x9F...' for column 'name' at row
ほぼ崩壊しましたが、幸いなことに、この幽霊の問題は最終的に解決されました。データに示されている理由は、MYSQL 5.5 より前では、UTF8 エンコードは 1 ~ 3 バイトしかサポートしておらず、BMP 部分の Unicode エンコード領域のみをサポートしており、絵文字アイコンはたまたま 4 バイトのエンコードで格納されていたためです。 MYSQL5.5 以降、4 バイトの UTF エンコーディング utf8mb4 がサポートされるようになり、1 文字は最大 4 バイトまで持つことができるため、より多くの文字セットをサポートできるようになります。したがって、この問題を解決するには、すべてのデータベース テーブルの文字エンコーディングを utf8mb4 に変更する必要があります。
一般的に使用される文字セット
ASCII: 情報交換のための米国標準エンコーディング、英語とその他の西ヨーロッパ言語、シングルバイトエンコーディング、1 文字を表す 7 ビット、合計 128 文字。
GBK: 2 バイト、中国語文字内部コード拡張仕様; 中国語、日本語、韓国語の中国語文字、英語、数字; 2 バイト エンコーディング; 合計 21,003 文字の中国語が含まれており、GB2312 の拡張です。
UTF-8: Unicode 標準の可変長文字エンコーディング。世界中の数十のテキスト システムを含む業界の統一標準である Unicode 標準 (Unicode)。
UTF-8:各文字をエンコードするには 1 ~ 3 バイトを使用します。
utf8mb4: 4 バイトを保存します。絵文字表現は 4 バイトになる可能性があるため、アプリケーション シナリオは絵文字表現を保存するために使用されます。
utf8mb4: MySQL バージョン > 5.5.3。
その他の一般的な文字セット: UTF-32、UTF-16、Big5、latin1
データベース内の文字セットには 2 つのレベルの意味が含まれています
さまざまなテキストのコレクション各国の文字、句読点、図記号、数字などの記号。
文字エンコード方式、つまりバイナリデータと文字の間のマッピング規則。
#システム環境
MySQL 5.7.14Mac OSX 10.11.6まずはバックアップ
データをアップグレードする前にサーバー上のすべてのデータをバックアップし、良い習慣を維持し、安全を第一に考えてください。MySQL のアップグレード
新しいデータベースはここからダウンロードできますMySQL サーバーを v5.5.3 にアップグレードします。 データベース、テーブル、フィールドを変更する
# 对每一个数据库: ALTER DATABASE 这里数据库名字 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; # 对每一个表: ALTER TABLE 这里是表名字 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 对每一个字段: ALTER TABLE 这里是表名字 CHANGE 字段名字 重复字段名字 VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 上面一句或者使用modify来更改 ALTER TABLE 这里是表名字 modify 字段名字 VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '';
utf8mb4 は utf8 と完全に下位互換性があり、文字化けやその他の形式のデータ損失はありません。理論的には、心配することなく変更できます。変更が心配な場合は、バックアップからデータを復元し、絵文字互換のストレージの問題はプログラマに任せることができます。保存するときにフィルタリングして、base64 に変換します。それを取得するときに変換して戻しますか? ...データベースを変更する方が便利です。
フィールドとインデックスを確認してくださいすべてを utf8mb4 に設定しないでください。これは必要です。フィールドタイプの一部が VARCHAR である場合にのみ、utf8mb4 に設定します。
MySQL 設定ファイルを変更するここが最もわかりにくい場所です。Mac osx システムでは /etc/my.cnf が見つかりません。はまったく存在しないため、そのようなファイルを作成して変更する必要があります。
# 进入这个目录, # 在这个目录下面有个后缀为`.cnf`的文件 cd /usr/local/mysql/support-files/ # 将这个文件复制到`etc`目录中并将名字命名为`my.cnf` sudo cp my-default.cnf /etc/my.cnf # 然后编辑`my.cnf`文件,将下面内容复制到里面。 sudo vim /etc/my.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
再起動の手順は非常に重要です。そうでないと効果がありません。
開始:/usr/local/mysql/support-files/mysql.server start
停止:/usr/local/mysql/support-files/mysql.server stop
Restart:/usr/local/mysql/support-files/mysql.server restart
システムはこの形式で再起動、停止、または開始できます
service mysqld stop service mysqld start service mysqld restart
次のコマンドを使用して、設定が成功したかどうかを確認します。
# 登陆MySQL进行查询 mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; # 运行上面代码显示下面结果 # +--------------------------+--------------------+ # | Variable_name | Value | # +--------------------------+--------------------+ # | character_set_client | utf8mb4 | # | character_set_connection | utf8mb4 | # | character_set_database | utf8mb4 | # | character_set_filesystem | binary | # | character_set_results | utf8mb4 | # | character_set_server | utf8mb4 | # | character_set_system | utf8 | # | collation_connection | utf8mb4_unicode_ci | # | collation_database | utf8mb4_unicode_ci | # | collation_server | utf8mb4_unicode_ci | # +--------------------------+--------------------+ # 查看表的情况 mysql> SHOW FULL COLUMNS FROM users_profile;
ここまで到達したということは、成功したことを意味します。おめでとう! ~
テーブルを修復して最適化するこのステップに到達したので、テーブルを修復して最適化する必要はありません。安全のため、まだこの2つのコマンドを実行したので、目的は分かりませんが、メモを兼ねてここに載せておきます。
rree以上がMySQL は絵文字アイコンのストレージをサポートしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。