--- a/src/connection.cpp
+++ b/src/connection.cpp
@@ -18,6 +18,14 @@
 #include "cnxninfo.h"
 #include "sqlwchar.h"
 
+#ifdef WORDS_BIGENDIAN
+# define OPTENC_UTF16NE OPTENC_UTF16BE
+# define ENCSTR_UTF16NE "utf-16be"
+#else
+# define OPTENC_UTF16NE OPTENC_UTF16LE
+# define ENCSTR_UTF16NE "utf-16le"
+#endif
+
 #if PY_MAJOR_VERSION < 3
 static bool IsStringType(PyObject* t) { return (void*)t == (void*)&PyString_Type; }
 static bool IsUnicodeType(PyObject* t) { return (void*)t == (void*)&PyUnicode_Type; }
@@ -90,7 +98,7 @@ static bool Connect(PyObject* pConnectSt
         // indication that we can handle Unicode.  We are going to use the same unicode ending
         // as we do for binding parameters.
 
-        SQLWChar wchar(pConnectString, SQL_C_WCHAR, encoding, "utf-16le");
+        SQLWChar wchar(pConnectString, SQL_C_WCHAR, encoding, ENCSTR_UTF16NE);
         if (!wchar)
             return false;
 
@@ -216,24 +224,24 @@ PyObject* Connection_New(PyObject* pConn
     // single-byte text we don't actually know what the encoding is.  For example, with SQL
     // Server the encoding is based on the database's collation.  We ask the driver / DB to
     // convert to SQL_C_WCHAR and use the ODBC default of UTF-16LE.
-    cnxn->sqlchar_enc.optenc = OPTENC_UTF16LE;
-    cnxn->sqlchar_enc.name   = _strdup("utf-16le");
+    cnxn->sqlchar_enc.optenc = OPTENC_UTF16NE;
+    cnxn->sqlchar_enc.name   = _strdup(ENCSTR_UTF16NE);
     cnxn->sqlchar_enc.ctype  = SQL_C_WCHAR;
 
-    cnxn->sqlwchar_enc.optenc = OPTENC_UTF16LE;
-    cnxn->sqlwchar_enc.name   = _strdup("utf-16le");
+    cnxn->sqlwchar_enc.optenc = OPTENC_UTF16NE;
+    cnxn->sqlwchar_enc.name   = _strdup(ENCSTR_UTF16NE);
     cnxn->sqlwchar_enc.ctype  = SQL_C_WCHAR;
 
-    cnxn->metadata_enc.optenc = OPTENC_UTF16LE;
-    cnxn->metadata_enc.name   = _strdup("utf-16le");
+    cnxn->metadata_enc.optenc = OPTENC_UTF16NE;
+    cnxn->metadata_enc.name   = _strdup(ENCSTR_UTF16NE);
     cnxn->metadata_enc.ctype  = SQL_C_WCHAR;
 
     // Note: I attempted to use UTF-8 here too since it can hold any type, but SQL Server fails
     // with a data truncation error if we send something encoded in 2 bytes to a column with 1
     // character.  I don't know if this is a bug in SQL Server's driver or if I'm missing
     // something, so we'll stay with the default ODBC conversions.
-    cnxn->unicode_enc.optenc = OPTENC_UTF16LE;
-    cnxn->unicode_enc.name   = _strdup("utf-16le");
+    cnxn->unicode_enc.optenc = OPTENC_UTF16NE;
+    cnxn->unicode_enc.name   = _strdup(ENCSTR_UTF16NE);
     cnxn->unicode_enc.ctype  = SQL_C_WCHAR;
 
 #if PY_MAJOR_VERSION < 3