質問
に対する返答の一つが、 昨日私がした質問 データベースが UTF-8 文字を正しく処理できることを確認する必要があると提案されました。MySQL でこれを行うにはどうすればよいでしょうか?
解決
更新:
簡単な答え-ほとんどの場合、utf8mb4
文字セットとutf8mb4_unicode_ci
照合を使用する必要があります。
データベースを変更するには:
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
参照:
-
この回答に対するアーロンのコメント作成方法MySQLはUTF-8を適切に処理します
-
変換ガイド: https:// dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html
元の回答:
MySQL 4.1以降には、UTF-8のデフォルト文字セットがあります。これはmy.cnf
ファイルで確認できます。忘れずに両方のクライアントとサーバー(default-character-set
とcharacter-set-server
)を設定してください。
UTF-8に変換する既存のデータがある場合は、データベースをダンプし、UTF-8としてインポートし直してください:
- データベースにクエリ/挿入する前に
SET NAMES utf8
を使用します - 新しいテーブルの作成時に
DEFAULT CHARSET=utf8
を使用 - この時点で、MySQLクライアントとサーバーはUTF-8である必要があります(<=>を参照)。使用する言語(PHPなど)もUTF-8でなければならないことに注意してください。 PHPの一部のバージョンは、UTF-8に対応していない可能性がある独自のMySQLクライアントライブラリを使用します。
既存のデータを移行する場合は、最初にバックアップすることを忘れないでください!物事が計画通りに進まない場合、データの多くの奇妙なチョッピングが発生する可能性があります!
一部のリソース:
- 完全なUTF-8移行(cdbaby.com)
- php関数のUTF-8準備に関する記事(これに注意してください情報が古い)
他のヒント
これを「永続的」にするには、my.cnf
:
[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8
確認するには、クライアントに移動していくつかの変数を表示します:
SHOW VARIABLES LIKE 'character_set%';
すべてがutf8
であることを確認します。ただし、..._filesystem
はbinary
および..._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 に出力している場合。(はい、ここではスペルが異なります。)
上記のリンクには、「すべての懸念事項に対処するには、詳細な正規の回答が必要です」が記載されています。-- このフォーラムにはスペース制限があります。
編集
に加えて 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 collation
をUTF-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;