使用 SQL 服务器的 SlashDB 中的 UTF8 错误

UTF8 Error in SlashDB using SQL Server

我正在使用 SQL 服务器和 SlashDB。它一直运行良好。今天发生错误,可能是说我定义了错误的数据库字符集。我收到此错误:

ValueError | 'utf8' codec can't decode byte 0xa0 in position 183: invalid start byte

有些查询有效,有些则无效。根据我的研究,我看到 SQL 服务器不支持 UTF-8,这是我设置的。您知道我如何知道在 SlashDB 数据库设置中将数据库字符集设置为什么吗?

我只知道数据库排序规则设置为 SQL_Latin1_General_CP1_CI_AS

说明:看起来像一个不间断的 space 字符被写入纯文本字段(类型 VARCHAR 或 CHAR)。您的数据库的默认编码是 Latin 1,但 SlashDB 配置为使用 utf-8 编解码器将该字符串解码为 Unicode。这是行不通的,因为这个字符的 utf-8 编码实际上是两个字节:C2 A0,而对于 Latin 1 只有一个字节 A0。

In [38]: u'\xa0'.encode('utf-8')
Out[38]: '\xc2\xa0'

In [39]: u'\xa0'.encode('latin-1')
Out[39]: '\xa0'

In [40]: print '\xa0'.decode('latin-1')


In [41]: print '\xa0'.decode('utf-8')
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-41-018a073d68b8> in <module>()
----> 1 print '\xa0'.decode('utf-8')

D:\Victor\Anaconda2\lib\encodings\utf_8.pyc in decode(input, errors)
     14
     15 def decode(input, errors='strict'):
---> 16     return codecs.utf_8_decode(input, errors, True)
     17
     18 class IncrementalEncoder(codecs.IncrementalEncoder):

UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 0: invalid start byte

修复: 您应该在 SlashDB 的配置中匹配数据库的编码。为此,在 Configure -> Databases 下编辑您的数据库连接,并将字符编码更改为 "latin-1"。然后循环连接。

建议:对于可能需要国际字符或非原则 table 常规 7 位 ASCII 之外的控制代码的字段,您可能需要考虑使用 Unicode 数据在数据库 table 中输入 NCHAR 和 NVARCHAR 等类型。这些不需要解码,因为数据库驱动程序会将它们作为 Unicode 发送到 SlashDB。