115

昨日私が行った質問への回答の 1 つは、データベースが UTF-8 文字を正しく処理できることを確認する必要があることを示唆していました。MySQLでこれを行うにはどうすればよいですか?

4

14 に答える 14

102

アップデート:

短い答え - ほとんどの場合、utf8mb4文字セットとutf8mb4_unicode_ci照合順序を使用する必要があります。

データベースを変更するには:

ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

見る:

元の回答:

MySQL 4.1 以降のデフォルトの文字セットは UTF-8 です。ファイルでこれを確認できます。クライアントとサーバーの両方my.cnfを設定することを忘れないでください (および)。default-character-setcharacter-set-server

UTF-8 に変換したい既存のデータがある場合は、データベースをダンプし、UTF-8 としてインポートして戻します。次のことを確認してください。

  • SET NAMES utf8データベースにクエリ/挿入する前に使用する
  • DEFAULT CHARSET=utf8新しいテーブルを作成するときに使用します
  • この時点で、MySQL クライアントとサーバーは UTF-8 になっているはずです (「参考文献」を参照my.cnf)。使用する言語 (PHP など) もすべて UTF-8 でなければならないことに注意してください。PHP の一部のバージョンでは、独自の MySQL クライアント ライブラリが使用されますが、これは UTF-8 に対応していない可能性があります。

既存のデータを移行したい場合は、最初にバックアップすることを忘れないでください! 物事が計画どおりに進まない場合、多くの奇妙なデータのチョッピングが発生する可能性があります。

いくつかのリソース:

于 2008-10-14T18:21:03.190 に答える
47

これを「永続的」にするために、my.cnf

[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8

確認するには、クライアントに移動していくつかの変数を表示します。

SHOW VARIABLES LIKE 'character_set%';

それらがすべて、 MySQLインストールのどこかを指しているはずのとutf8を除いてすべてであることを確認します。..._filesystembinary..._dir

于 2008-10-14T18:30:19.597 に答える
33

MySQL 4.1 以降には、呼び出すデフォルトの文字セットがありますutf8が、実際にはこれは UTF-8 のサブセットにすぎません (3 バイト以下の文字のみが許可されます)。

utf8mb4「完全な」UTF-8 が必要な場合は、文字セットとして使用します。

于 2015-04-28T20:51:10.933 に答える
21

簡単な答え: utf8mb44 つの場所で使用します。

  • クライアントのバイトは、latin1/cp1251/etc ではなく、utf8 です。
  • SET NAMES utf8mb4または、MySQL へのクライアントの接続を確立するときに同等のもの
  • CHARACTER SET utf8mb4すべてのテーブル/列 - 厳密に ascii/hex/country_code/zip_code/etc である列を除く。
  • <meta charset charset=UTF-8>HTMLに出力している場合。(はい、ここではスペルが異なります。)

詳細情報;
ずっとUTF8

上記のリンクは、「すべての懸念に対処するには詳細な標準的な回答が必要です」を提供します。-- このフォーラムにはスペース制限があります。

編集

CHARACTER SET utf8mb4世界中の「すべて」の文字を含むことに加えてCOLLATION utf8mb4_unicode_520_ci、使用する「最高の万能」照合であると言えます。(トルコ語、スペイン語など、これらの言語のニュアンスが必要な人向けの照合順序もあります。)

于 2016-01-20T01:26:23.857 に答える
4

文字セットは、データベース(デフォルト)とテーブルのプロパティです。あなたは見ることができます(MySQLコマンド):

show create database foo; 
> CREATE DATABASE  `foo`.`foo` /*!40100 DEFAULT CHARACTER SET latin1 */

show create table foo.bar;
> lots of stuff ending with
> ) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1

言い換えると; データベースの文字セットを確認したり、変更したりするのは非常に簡単です。

ALTER TABLE `foo`.`bar` CHARACTER SET utf8;
于 2008-10-14T18:32:39.907 に答える
3

Javierのソリューションに従いましたが、my.cnfにいくつかの異なる行を追加しました。

[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8 

私はここでこのアイデアを見つけました:http ://dev.mysql.com/doc/refman/5.0/en/charset-server.htmlページ下部の最初の/唯一のユーザーコメント。彼は、 skip-character-set-client-handshakeにはいくつかの重要性があると述べています。

于 2012-05-20T12:14:19.900 に答える
3

データベース自体の文字セット エンコーディングを UTF-8 に変更するには、mysql> プロンプトで次のコマンドを入力します。USE ALTER DATABASE.. DBNAME をデータベース名に置き換えます。

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

これはこの質問の複製ですMySQL データベースの文字セットと照合順序全体を UTF-8 に変換する方法は?

于 2016-01-25T07:14:19.303 に答える
0

を設定してdatabase collationから、データベースのデフォルトUTF-8 に適用します。table collation

于 2016-01-25T08:01:34.123 に答える
-1

これは私のために働いた:

mysqli_query($connection, "SET NAMES 'utf8'");

于 2021-08-14T10:41:26.880 に答える
-1

あなたの答えは、MySql 設定で構成できるということです。私の回答では、文脈から外れているかもしれませんが、これはあなたの助けになることもわかっています.
設定方法Character SetCollation.

デフォルトの MySQL 文字セットと照合 ( latin1, latin1_swedish_ci) を使用してデータを保存するアプリケーションの場合、特別な構成は必要ありません。アプリケーションが別の文字セットまたは照合順序を使用してデータ ストレージを必要とする場合、文字セット情報をいくつかの方法で構成できます。

  • データベースごとに文字設定を指定します。たとえば、あるデータベースを使用するアプリケーションには が必要な場合がありutf8、別のデータベースを使用するアプリケーションには sjis が必要な場合があります。
  • サーバーの起動時に文字設定を指定します。これにより、サーバーは、他の取り決めを行わないすべてのアプリケーションに対して指定された設定を使用します。
  • ソースから MySQL をビルドする場合は、構成時に文字設定を指定します。これにより、サーバーは、サーバーの起動時に指定する必要なく、すべてのアプリケーションに対して指定された設定を使用します。

utf8 character set を設定する質問の例をここに示します。ここでは、より役立つように照合を設定します(utf8_general_cicollat​​ion` )。

データベースごとに文字設定を指定する

  CREATE DATABASE new_db
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

サーバーの起動時に文字設定を指定する

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

MySQL の構成時に文字設定を指定する

shell> cmake . -DDEFAULT_CHARSET=utf8 \
           -DDEFAULT_COLLATION=utf8_general_ci

接続に適用される文字セットと照合システム変数の値を確認するには、次のステートメントを使用します。

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

これは長い答えかもしれませんが、すべての方法があります。私の答えがお役に立てば幸いです。詳細についてはhttp://dev.mysql.com/doc/refman/5.7/en/charset-applications.html

于 2016-01-20T06:04:45.443 に答える
-2

UTF-8 へのデータベース接続

$connect = mysql_connect('$localhost','$username','$password') or die(mysql_error());
mysql_set_charset('utf8',$connect);
mysql_select_db('$database_name','$connect') or die(mysql_error());
于 2016-04-14T07:22:33.750 に答える
-3

データベース接続を UTF8 に設定します。

  if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){          
         //set to utf8 encoding
         mysql_set_charset('utf8',$handle);
  }
于 2013-08-12T21:44:49.613 に答える
-3

SET NAMES UTF8

これはトリックです

于 2008-10-14T18:21:46.277 に答える
-3

解決策を見つけることができました。http://technoguider.com/2015/05/utf8-set-up-in-mysql/で指定されているように、以下を実行しました

SET NAMES UTF8;
set collation_server = utf8_general_ci;
set default-character-set = utf8;
set init_connect = ’SET NAMES utf8′;
set character_set_server = utf8;
set character_set_client = utf8;
于 2015-06-09T07:41:27.710 に答える