MySQL utf8をutf8mb4に変更する
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
[[Linuxめも]]
#contents
MySQLにてUTF-8の4バイト文字を使用するためには文字コードは...
では既存のutf8のデータベースをutf8mb4に変更するにはどうし...
*基本的な方法 [#heb0f4dc]
テーブルの文字コードを変更します。
ALTER TABLE `table` DEFAULT CHARACTER SET utf8mb4;
4バイト文字が登録されるカラムの文字コードを変更します。
ALTER TABLE `table`
modify `field1` varchar(255) CHARACTER SET utf8mb4,
modify `field2` varchar(255) CHARACTER SET utf8mb4;
utf8mb4対象となるフィールドがINDEX対象であれば767byte問題...
3,072byte使用できるようになっていればデータ型の変更は不要...
ALTER TABLE `table`
modify `index_field1` varchar(191) CHARACTER SET utf8...
modify `field2` varchar(255) CHARACTER SET utf8mb4;
あとはPHPからの接続時に文字コードを指定するようにします。
$dbh = new PDO('mysql:dbname=DBNAME;host=localhost;chars...
*Movable Typeの場合 [#w846d8e0]
Movable Type6.3系で試しました。~
ブログの記事に絵文字を登録し、公開画面にて表示されること...
**utf8mb4で接続する [#u546caa8]
lib/MT/ObjectDriver/Driver/DBD/mysql.pm~
69行目あたりの記述を変更します。
my %Charset = (
#'utf-8' => 'utf8',
'utf-8' => 'utf8mb4',
'shift_jis' => 'sjis',
'shift-jis' => 'sjis',
'euc-jp' => 'ujis',
#'iso-8859-1' => 'latin1'
);
**テーブル定義を変更 [#v95b7746]
-- ブログ記事を保存するテーブルの文字コードを変更
ALTER TABLE `mt_entry` DEFAULT CHARACTER SET utf8mb4;
-- utf8で設定されているカラムの文字コードを変更
ALTER TABLE mt_entry
modify `entry_approver_ids` varchar(255) CHARACTER S...
modify `entry_atom_id` varchar(255) CHARACTER SET ut...
modify `entry_basename` varchar(255) CHARACTER SET u...
modify `entry_class` varchar(255) CHARACTER SET utf8...
modify `entry_convert_breaks` varchar(60) CHARACTER ...
modify `entry_excerpt` mediumtext CHARACTER SET utf8...
modify `entry_ext_datas` mediumtext CHARACTER SET ut...
modify `entry_keywords` mediumtext CHARACTER SET utf...
modify `entry_pinged_urls` mediumtext CHARACTER SET ...
modify `entry_prefs` mediumtext CHARACTER SET utf8mb4,
modify `entry_revision_comment` varchar(255) CHARACT...
modify `entry_tangent_cache` mediumtext CHARACTER SE...
modify `entry_text` mediumtext CHARACTER SET utf8mb4,
modify `entry_text_more` mediumtext CHARACTER SET ut...
modify `entry_title` varchar(255) CHARACTER SET utf8...
modify `entry_to_ping_urls` mediumtext CHARACTER SET...
他にも4バイト文字を登録したい部分があれば適宜同様にテーブ...
*WordPressの場合 [#f81d417b]
**Wordpressのバージョンを上げて対応する [#o693c500]
WordPress4.2からutf8mb4に対応しています。~
それ以前のバージョンは条件を満たしていれば4.2へのアップグ...
https://make.wordpress.org/core/2015/04/02/the-utf8mb4-up...
-You’re currently using the utf8 character set.
-Your MySQL server is version 5.5.3 or higher (including ...
-Your MySQL client libraries are version 5.5.3 or higher....
utf8でMySQL5.5.3以上であれば対象となりそうです。
**WordPressのバージョンを上げずに対応する [#h4bec2a7]
アップグレードプログラムを実行してデータベースに変更を加...
WordPress4.1.20をインストールし、以下の方法で変更後、4バ...
文字コードを変更します。
wp-config.php
define('DB_CHARSET', 'utf8mb4');
Twenty Fifteenテーマを使用している場合、functions.phpの最...
wp-content/themes/twentyfifteen/functions.php
if (isset($_GET["upgradeUtf8mb4"]) && $_GET["upgradeUtf8...
if ( is_multisite() ) {
$tables = $wpdb->tables( 'blog' );
} else {
$tables = $wpdb->tables( 'all' );
if ( ! wp_should_upgrade_global_tables() ) {
$global_tables = $wpdb->tables( 'global' );
$tables = array_diff_assoc( $tables, $global...
}
}
foreach ( $tables as $table ) {
maybe_convert_table_to_utf8mb4( $table );
}
echo "utf8mb4 convert done.";
exit();
}
function maybe_convert_table_to_utf8mb4( $table ) {
global $wpdb;
$results = $wpdb->get_results( "SHOW FULL COLUMNS FR...
if ( ! $results ) {
return false;
}
foreach ( $results as $column ) {
if ( $column->Collation ) {
list( $charset ) = explode( '_', $column->Co...
$charset = strtolower( $charset );
if ( 'utf8' !== $charset && 'utf8mb4' !== $c...
return false;
}
}
}
$table_details = $wpdb->get_row( "SHOW TABLE STATUS ...
if ( ! $table_details ) {
return false;
}
list( $table_charset ) = explode( '_', $table_detail...
$table_charset = strtolower( $table_charset );
if ( 'utf8mb4' === $table_charset ) {
return true;
}
return $wpdb->query( "ALTER TABLE $table CONVERT TO ...
}
function wp_should_upgrade_global_tables() {
if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) {
return false;
}
$should_upgrade = true;
if ( ! is_main_network() ) {
$should_upgrade = false;
}
if ( ! is_main_site() ) {
$should_upgrade = false;
}
return apply_filters( 'wp_should_upgrade_global_tabl...
}
http://example.com/?upgradeUtf8mb4=1 へアクセスして「utf8...
functions.phpに追記した部分は削除しておきます。
*EC-CUBE2系の場合 [#cc070100]
調査中
*EC-CUBE3系の場合 [#nc5994ba]
EC-CUBE3系は2018年4月10日現在で3.0.15が最新バージョンで文...
3.0.13にてutf8mb4環境を考慮し、emailについてのインデック...
https://github.com/EC-CUBE/ec-cube/pull/1996
終了行:
[[Linuxめも]]
#contents
MySQLにてUTF-8の4バイト文字を使用するためには文字コードは...
では既存のutf8のデータベースをutf8mb4に変更するにはどうし...
*基本的な方法 [#heb0f4dc]
テーブルの文字コードを変更します。
ALTER TABLE `table` DEFAULT CHARACTER SET utf8mb4;
4バイト文字が登録されるカラムの文字コードを変更します。
ALTER TABLE `table`
modify `field1` varchar(255) CHARACTER SET utf8mb4,
modify `field2` varchar(255) CHARACTER SET utf8mb4;
utf8mb4対象となるフィールドがINDEX対象であれば767byte問題...
3,072byte使用できるようになっていればデータ型の変更は不要...
ALTER TABLE `table`
modify `index_field1` varchar(191) CHARACTER SET utf8...
modify `field2` varchar(255) CHARACTER SET utf8mb4;
あとはPHPからの接続時に文字コードを指定するようにします。
$dbh = new PDO('mysql:dbname=DBNAME;host=localhost;chars...
*Movable Typeの場合 [#w846d8e0]
Movable Type6.3系で試しました。~
ブログの記事に絵文字を登録し、公開画面にて表示されること...
**utf8mb4で接続する [#u546caa8]
lib/MT/ObjectDriver/Driver/DBD/mysql.pm~
69行目あたりの記述を変更します。
my %Charset = (
#'utf-8' => 'utf8',
'utf-8' => 'utf8mb4',
'shift_jis' => 'sjis',
'shift-jis' => 'sjis',
'euc-jp' => 'ujis',
#'iso-8859-1' => 'latin1'
);
**テーブル定義を変更 [#v95b7746]
-- ブログ記事を保存するテーブルの文字コードを変更
ALTER TABLE `mt_entry` DEFAULT CHARACTER SET utf8mb4;
-- utf8で設定されているカラムの文字コードを変更
ALTER TABLE mt_entry
modify `entry_approver_ids` varchar(255) CHARACTER S...
modify `entry_atom_id` varchar(255) CHARACTER SET ut...
modify `entry_basename` varchar(255) CHARACTER SET u...
modify `entry_class` varchar(255) CHARACTER SET utf8...
modify `entry_convert_breaks` varchar(60) CHARACTER ...
modify `entry_excerpt` mediumtext CHARACTER SET utf8...
modify `entry_ext_datas` mediumtext CHARACTER SET ut...
modify `entry_keywords` mediumtext CHARACTER SET utf...
modify `entry_pinged_urls` mediumtext CHARACTER SET ...
modify `entry_prefs` mediumtext CHARACTER SET utf8mb4,
modify `entry_revision_comment` varchar(255) CHARACT...
modify `entry_tangent_cache` mediumtext CHARACTER SE...
modify `entry_text` mediumtext CHARACTER SET utf8mb4,
modify `entry_text_more` mediumtext CHARACTER SET ut...
modify `entry_title` varchar(255) CHARACTER SET utf8...
modify `entry_to_ping_urls` mediumtext CHARACTER SET...
他にも4バイト文字を登録したい部分があれば適宜同様にテーブ...
*WordPressの場合 [#f81d417b]
**Wordpressのバージョンを上げて対応する [#o693c500]
WordPress4.2からutf8mb4に対応しています。~
それ以前のバージョンは条件を満たしていれば4.2へのアップグ...
https://make.wordpress.org/core/2015/04/02/the-utf8mb4-up...
-You’re currently using the utf8 character set.
-Your MySQL server is version 5.5.3 or higher (including ...
-Your MySQL client libraries are version 5.5.3 or higher....
utf8でMySQL5.5.3以上であれば対象となりそうです。
**WordPressのバージョンを上げずに対応する [#h4bec2a7]
アップグレードプログラムを実行してデータベースに変更を加...
WordPress4.1.20をインストールし、以下の方法で変更後、4バ...
文字コードを変更します。
wp-config.php
define('DB_CHARSET', 'utf8mb4');
Twenty Fifteenテーマを使用している場合、functions.phpの最...
wp-content/themes/twentyfifteen/functions.php
if (isset($_GET["upgradeUtf8mb4"]) && $_GET["upgradeUtf8...
if ( is_multisite() ) {
$tables = $wpdb->tables( 'blog' );
} else {
$tables = $wpdb->tables( 'all' );
if ( ! wp_should_upgrade_global_tables() ) {
$global_tables = $wpdb->tables( 'global' );
$tables = array_diff_assoc( $tables, $global...
}
}
foreach ( $tables as $table ) {
maybe_convert_table_to_utf8mb4( $table );
}
echo "utf8mb4 convert done.";
exit();
}
function maybe_convert_table_to_utf8mb4( $table ) {
global $wpdb;
$results = $wpdb->get_results( "SHOW FULL COLUMNS FR...
if ( ! $results ) {
return false;
}
foreach ( $results as $column ) {
if ( $column->Collation ) {
list( $charset ) = explode( '_', $column->Co...
$charset = strtolower( $charset );
if ( 'utf8' !== $charset && 'utf8mb4' !== $c...
return false;
}
}
}
$table_details = $wpdb->get_row( "SHOW TABLE STATUS ...
if ( ! $table_details ) {
return false;
}
list( $table_charset ) = explode( '_', $table_detail...
$table_charset = strtolower( $table_charset );
if ( 'utf8mb4' === $table_charset ) {
return true;
}
return $wpdb->query( "ALTER TABLE $table CONVERT TO ...
}
function wp_should_upgrade_global_tables() {
if ( defined( 'DO_NOT_UPGRADE_GLOBAL_TABLES' ) ) {
return false;
}
$should_upgrade = true;
if ( ! is_main_network() ) {
$should_upgrade = false;
}
if ( ! is_main_site() ) {
$should_upgrade = false;
}
return apply_filters( 'wp_should_upgrade_global_tabl...
}
http://example.com/?upgradeUtf8mb4=1 へアクセスして「utf8...
functions.phpに追記した部分は削除しておきます。
*EC-CUBE2系の場合 [#cc070100]
調査中
*EC-CUBE3系の場合 [#nc5994ba]
EC-CUBE3系は2018年4月10日現在で3.0.15が最新バージョンで文...
3.0.13にてutf8mb4環境を考慮し、emailについてのインデック...
https://github.com/EC-CUBE/ec-cube/pull/1996
ページ名: