Azure SQL Database/SQL Server で WordPress を動作させるソリューションに ProjectNami があります。
標準の状態で日本語を扱うには、サーバーの照合順序を Japanese_CI_AS
にする必要があります。
しかし、この状態ですと、cp932 の文字集合の範囲外の文字列は文字化けしてしまいます。
スマートフォンでよく使用される絵文字が文字化けしてしまうため、巷では、寿司ビール問題 と呼ばれています。これ防ぐには、 Nプレフィックスを付与する 必要があります。
以下のような修正で、 UTF-8 でのデータベース接続が有効になり、照合順序を SQL_Latin1_General_CP1_CI_AS
としても文字化けせずに投稿できます。
もちろん、絵文字など、特殊な文字列の使用も可能です。
utf-8.patch
diff --git a/wp-config.php b/wp-config.php
index a1a9449..7382888 100644
--- a/wp-config.php
+++ b/wp-config.php
@@ -36,7 +36,8 @@ define('DB_HOST', ( getenv('ProjectNami.DBHost') ? getenv('ProjectNami.DBHost')
define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
-define('DB_COLLATE', '');
+define('DB_COLLATE', 'SQL_Latin1_General_CP1_CI_AS');
+putenv('ProjectNami.UTF8=1');
/**#@+
* Authentication Unique Keys and Salts.
diff --git a/wp-includes/wp-db.php b/wp-includes/wp-db.php
index 409d4a8..afa56ff 100644
--- a/wp-includes/wp-db.php
+++ b/wp-includes/wp-db.php
@@ -1290,7 +1290,7 @@ class wpdb {
$query = str_replace( "'%s'", '%s', $query ); // in case someone mistakenly already singlequoted it
$query = str_replace( '"%s"', '%s', $query ); // doublequote unquoting
$query = preg_replace( '|(?<!%)%f|' , '%F', $query ); // Force floats to be locale unaware
- $query = preg_replace( '|(?<!%)%s|', "'%s'", $query ); // quote the strings, avoiding escaped strings like %%s
+ $query = preg_replace( '|(?<!%)%s|', "N'%s'", $query ); // quote the strings, avoiding escaped strings like %%s
array_walk( $args, array( $this, 'escape_by_ref' ) );
return @vsprintf( $query, $args );
}