質問

に対する返答の一つが、 昨日私がした質問 データベースが UTF-8 文字を正しく処理できることを確認する必要があると提案されました。MySQL でこれを行うにはどうすればよいでしょうか?

役に立ちましたか?

解決

更新:

簡単な答え-ほとんどの場合、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である必要があります(<=>を参照)。使用する言語(PHPなど)もUTF-8でなければならないことに注意してください。 PHPの一部のバージョンは、UTF-8に対応していない可能性がある独自のMySQLクライアントライブラリを使用します。

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

一部のリソース:

他のヒント

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

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

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

SHOW VARIABLES LIKE 'character_set%';

すべてがutf8であることを確認します。ただし、..._filesystembinaryおよび..._dirでなければならず、MySQLインストールのどこかを指します。

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

<!> quot; full <!> quot;が必要な場合は、文字セットとしてutf8mb4を使用します。 UTF-8。

短い答え:使用 utf8mb4 4 か所:

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

より詳しい情報 ;
ずっとUTF8

上記のリンクには、「すべての懸念事項に対処するには、詳細な正規の回答が必要です」が記載されています。-- このフォーラムにはスペース制限があります。

編集

に加えて CHARACTER SET utf8mb4 世界の「すべて」のキャラクターが含まれており、 COLLATION utf8mb4_unicode_520_ci は、使用する「総合的に最適な」照合順序であることは間違いありません。(これらの言語のニュアンスが知りたい人のために、トルコ語、スペイン語などの照合順序もあります。)

文字セットは、データベース(デフォルト)およびテーブルのプロパティです。 見ることができます(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;

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

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

これはこの質問の重複です MySQL データベースの文字セット全体と照合順序を UTF-8 に変換するにはどうすればよいですか?

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 には重要性があると述べています。

これらの MySQLとUTF-8のヒントが役立つ場合があります。残念ながら、それらは完全なソリューションを構成するものではなく、よくある落とし穴です。

database collationUTF-8に設定します その後、データベースのデフォルトにtable collationを適用します。

答えは、MySql 設定で設定できるということです。私の回答では文脈から外れているかもしれませんが、これもあなたにとって役立つことを知っています。
設定方法 Character Set そして Collation.

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

  • データベースごとに文字設定を指定します。 たとえば、1つのデータベースを使用するアプリケーションが必要とする場合があります utf8, 、一方、別のデータベースを使用するアプリケーションでは、SJIが必要になる場合があります。
  • サーバー起動時の文字設定を指定します。 これにより、他のアレンジメントを行わないすべてのアプリケーションで、サーバーが指定された設定を使用します。
  • 設定時に文字設定を指定する, 、ソースからmysqlを構築する場合。これにより、サーバーの起動時に指定することなく、サーバーがすべてのアプリケーションで指定された設定を使用します。

あなたの質問のためにここに示されている例は、 utf8 文字セットを設定します。ここでは、より役立つために照合順序も設定します(utf8_general_ci 照合`)。

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

  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

SET NAMES UTF8

これはトリックです

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());

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

  if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){          
         //set to utf8 encoding
         mysql_set_charset('utf8',$handle);
  }

解決策を見つけることができました。 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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top