From 1f943dc8fe1377d93253fad9f01e4b0aa8599bbd Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Fri, 15 Apr 2011 20:44:13 +0300 Subject: [PATCH] On Windows, if the encoding implied by locale is not allowed as a server-encoding, fall back to UTF-8. It happens at least with the Chinese locale, which implies BIG5. This is safe, because on Windows all locales are compatible with UTF-8. --- src/bin/initdb/initdb.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index fd1f20ee86..f1b51bf870 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -2906,7 +2906,19 @@ main(int argc, char *argv[]) } else if (!pg_valid_server_encoding_id(ctype_enc)) { - /* We recognized it, but it's not a legal server encoding */ + /* + * We recognized it, but it's not a legal server encoding. + * On Windows, UTF-8 works with any locale, so we can fall back + * to UTF-8. + */ +#ifdef WIN32 + printf(_("Encoding %s implied by locale is not allowed as a server-side encoding.\n" + "The default database encoding will be set to %s instead.\n"), + pg_encoding_to_char(ctype_enc), + pg_encoding_to_char(PG_UTF8)); + ctype_enc = PG_UTF8; + encodingid = encodingid_to_string(ctype_enc); +#else fprintf(stderr, _("%s: locale %s requires unsupported encoding %s\n"), progname, lc_ctype, pg_encoding_to_char(ctype_enc)); @@ -2915,6 +2927,7 @@ main(int argc, char *argv[]) "Rerun %s with a different locale selection.\n"), pg_encoding_to_char(ctype_enc), progname); exit(1); +#endif } else {