sql >> データベース >  >> RDS >> Mysql

MySQLの文字エンコードの問題を解決する方法は?

    MySQL文字エンコードの問題は、MySQLデータベースによってUTF8文字(å、ä、öなど)が正しく表示されない場合です。これは、デフォルトでMySQLがlatin1文字セットを使用するためです。この問題は、最近のWebコンテンツのグローバルな性質のために重要になっています。 MySQLの文字エンコードをUTF8に設定することで解決できます。これは複数の方法で行うことができます。

    1. 各接続の開始時にクエリ「SETNAMES‘utf8’」を実行します。これにより、MySQLはその接続の存続期間中UTF8を使用するように強制されます。これは、my.cnf(linux / mac)/ my.ini(windows)ファイルにアクセスできない場合に適したオプションです。
    2. データベースサーバーでファイルmy.cnf(linux / mac)/ my.ini(windows)を見つけて編集します。次の行をmysqldに追加します セクション:[mysqld] default-character-set =utf8 skip-character-set-client-handshakeここで、MySQLサーバーを再起動すると、MySQL文字エンコードはデフォルトでUTF8になります
    3. すでにデータベースがある場合はどうなりますか?コンテンツをUTF8に変換するにはどうすればよいですか?次の3つのクエリを使用できます。 DATABASE_NAME、TABLE_NAME、FIELD_NAMEを自分の値に置き換えます。テーブルTABLE_NAMEを変更しますFIELD_NAMEblobを変更します;データベースの変更DATABASE_NAMEcharset=utf8;テーブルTABLE_NAMEの変更FIELD_NAMEの変更varchar(255)文字セットutf8;フィールドをBLOBに変換します。これは、バイナリフィールドタイプです。次に、データベースの文字セットをutf8に変更します。最後に、フィールドをテキストまたはvarcharに変換し直します。

    次のクエリでMySQL文字エンコードを確認できます。

    デフォルトのMySQL文字エンコード

    mysql> show variables like 'char%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | latin1                     |
    | character_set_connection | latin1                     |
    | character_set_database   | latin1                     |
    | character_set_filesystem | binary                     |
    | character_set_results    | latin1                     |
    | character_set_server     | latin1                     |
    | character_set_system     | latin1                     |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)

    必要なMySQL文字エンコード

    mysql> show variables like 'char%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | utf8                       |
    | character_set_connection | utf8                       |
    | character_set_database   | utf8                       |
    | character_set_filesystem | binary                     |
    | character_set_results    | utf8                       |
    | character_set_server     | utf8                       |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)

    また、Django、CodeIgniterなどのプログラミングフレームワークがUTF8エンコーディングを使用していることを確認する必要があります。

    1. django.db.utils.ProgrammingError:manage.pyテスト中にリレーションapp_userが存在しません

    2. ルーム永続ライブラリを使用してパラメータで更新

    3. すでに実行中の64ビットOracleDatabaseServerを実行しているWindowsServerへのOracle32ビットクライアントのインストール

    4. IDENT_CURRENT()を使用して、SQLServerのID列の現在のID値を返します