RODBC: caracteres e números convertidos agressivamente (com / sem as.is)

Relacionado ahttps://stackoverflow.com/a/33284035/3358272, Estou encontrando um comportamento inconsistente ao extrair dados do SQL Server (2014).

library(RODBC)
sqlQuery(.conn, "CREATE TABLE r2test ( [mychar] [NVARCHAR](16), [mynum] [FLOAT])")
# character(0)
sqlQuery(.conn, "INSERT INTO r2test (mychar,mynum) VALUES ('1',3.141593),('2',6.283185)")
character(0)
str(sqlQuery(.conn, "SELECT * FROM r2test", stringsAsFactors = FALSE))
# 'data.frame': 2 obs. of  2 variables:
#  $ mychar: int  1 2
#  $ mynum : num  3.14 6.28

Nesse exemplo, vemos o comportamento indesejado: os caracteres demychar estão sendo convertidos internamente em números inteiros. De acordo com a resposta SO mencionada anteriormente, oas.is A opção anula isso, mas tem o infeliz efeito colateral de também forçar flutuações representadas em decimais para cadeias:

str(sqlQuery(.conn, "SELECT * FROM r2test", stringsAsFactors = FALSE, as.is = TRUE))
# 'data.frame': 2 obs. of  2 variables:
#  $ mychar: chr  "1" "2"
#  $ mynum : chr  "3.1415929999999999" "6.2831849999999996"

Se pelo menos um dosmychar na verdade não é um número inteiro inteiro, tudo está bem:

sqlQuery(.conn, "INSERT INTO r2test (mychar,mynum) VALUES ('a',9.424778)")
# character(0)
str(sqlQuery(.conn, "SELECT * FROM r2test", stringsAsFactors = FALSE))
# 'data.frame': 3 obs. of  2 variables:
#  $ mychar: chr  "1" "2" "a"
#  $ mynum : num  3.14 6.28 9.42

Infelizmente, o modelo de dados não suporta a adição arbitrária de algo para incentivar esse comportamento (ou simplesmente não pensei em uma maneira suficientemente boa de fazê-lo). O modelo de dados é tal que os valores demychar incluir01 e1 que são distintos em termos de caráter. A única solução alternativa que encontrei é usaras.is = TRUE, o que exigirá que euas.numeric todas as colunas relacionadas, algo que é um trabalho tedioso e (teoricamente) desnecessário.

Como os documentos sugerem a necessidade de definirDBMSencoding, Verifiquei a codificação atual (ajudada porhttps://stackoverflow.com/a/5182469/3358272):

sqlQuery(.conn, "SELECT SERVERPROPERTY('Collation')")
# 1 SQL_Latin1_General_CP1_CI_AS

Eu tentei usar (para chutes):DBMSencoding="latin1", DBMSencoding="UTF-8"e explicitamente embora o padrãoDBMSencoding="" sem mudança de comportamento.

Como incentivar o comportamento de não coagir demais os tipos de dados?

Atualmente usando o R-3.2.5 e o RODBC-1.3.13 no ubuntu.

questionAnswers(1)

yourAnswerToTheQuestion