Skip to content
Snippets Groups Projects
Commit 699a0ef7 authored by Magnus Hagander's avatar Magnus Hagander
Browse files

Re-allow UTF8 encodings on win32. Since UTF8 is converted to

UTF16 before being used, all (valid) locales will work for this.
parent 2d5b16bb
No related branches found
No related tags found
No related merge requests found
......@@ -13,7 +13,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.201 2007/10/13 20:18:41 tgl Exp $
* $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.202 2007/10/16 11:30:16 mha Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -258,7 +258,7 @@ createdb(const CreatedbStmt *stmt)
/*
* Check whether encoding matches server locale settings. We allow
* mismatch in two cases:
* mismatch in three cases:
*
* 1. ctype_encoding = SQL_ASCII, which means either that the locale
* is C/POSIX which works with any encoding, or that we couldn't determine
......@@ -268,12 +268,19 @@ createdb(const CreatedbStmt *stmt)
* This is risky but we have historically allowed it --- notably, the
* regression tests require it.
*
* 3. selected encoding is UTF8 and platform is win32. This is because
* UTF8 is a pseudo codepage that is supported in all locales since
* it's converted to UTF16 before being used.
*
* Note: if you change this policy, fix initdb to match.
*/
ctype_encoding = pg_get_encoding_from_locale(NULL);
if (!(ctype_encoding == encoding ||
ctype_encoding == PG_SQL_ASCII ||
#ifdef WIN32
encoding == PG_UTF8 ||
#endif
(encoding == PG_SQL_ASCII && superuser())))
ereport(ERROR,
(errmsg("encoding %s does not match server's locale %s",
......
......@@ -42,7 +42,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
* Portions taken from FreeBSD.
*
* $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.146 2007/10/16 09:09:11 petere Exp $
* $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.147 2007/10/16 11:30:16 mha Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -2840,7 +2840,17 @@ main(int argc, char *argv[])
/* We allow selection of SQL_ASCII --- see notes in createdb() */
if (!(ctype_enc == user_enc ||
ctype_enc == PG_SQL_ASCII ||
user_enc == PG_SQL_ASCII))
user_enc == PG_SQL_ASCII
#ifdef WIN32
/*
* On win32, if the encoding chosen is UTF8, all locales are OK
* (assuming the actual locale name passed the checks above). This
* is because UTF8 is a pseudo-codepage, that we convert to UTF16
* before doing any operations on, and UTF16 supports all locales.
*/
|| user_enc == PG_UTF8
#endif
))
{
fprintf(stderr, _("%s: encoding mismatch\n"), progname);
fprintf(stderr,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment