【问题标题】:How to encode your data properly before inserting it into a SQL database如何在将数据插入 SQL 数据库之前正确编码数据
【发布时间】:2020-05-07 14:27:37
【问题描述】:

编码问题总是很痛苦。这是我想要做的:

示例数据test.txt

Surname;Name
Şahin;Pakiz
Köpke;Marti

我使用

读入(UTF-8 编码的)文件
test <- fread(dec = ",", header = T, sep = ";", colClasses = "character", fill = T, encoding = "UTF-8", ...)

当我显示数据时,我得到以下信息

> test

   Surname  Name
1:   Sahin Pakiz
2:   Köpke Minna

当我只想得到Surname时,我收到了

> test$Surname

[1] "Şahin" "Köpke"

目前显示正确。

现在我想将表写入我的 SQL 数据库,使用

dplyr::copy_to(con, df=test, name="TestTable",
        temporary = FALSE, types=rep("nvarchar(MAX)", ncol(dt)))

在数据库中产生的

我认为 UTF-8 编码的字符串应该适用于 MS SQL Server。我错了。我不确定我需要在哪里进行更改。但是让我们假设数据总是以 UTF-8 编码传递。

知道从哪里开始吗?

【问题讨论】:

    标签: r sql-server dbplyr


    【解决方案1】:

    您应该检查您正在使用的当前排序规则。

    SELECT Name, Description FROM fn_helpcollations() WHERE Name LIKE '%UTF8';
    

    或者对于服务器:

    SELECT SERVERPROPERTY('Collation')
    

    由于 Sql Server 是由英国人制作的,它经常缺少 UTF-8 或 UTF-16 字符。 创建您的列时,您应该指定您使用的是 UTF-8:

    CREATE TABLE dbo.TestTable (
        Name NVARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8,
        Surname NVARCHAR(50) Latin1_General_100_CI_AI_SC_UTF8
    );
    

    更多信息here

    【讨论】:

    • 感谢您的回答。 UTF-8 排序规则不适用于我们的 SQL Server (13.00.5102)。有趣的是,我的前任能够将数据写入表中,并且即使表使用本机排序规则 Latin1_General_CI_AS,这两个字符也可以在 SQL Server Management Studio 中正确显示。我试过enc2native(Name),但这也给我留下了乱码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    相关资源
    最近更新 更多