使用python将unicode数据写入mssql?

使用python将unicode数据写入mssql?,python,sql-server,pandas,utf-8,character-encoding,Python,Sql Server,Pandas,Utf 8,Character Encoding,我正在尝试将包含希伯来文文本的.csv文件中的表写入sql server数据库。 该表有效,pandas读取数据正确,甚至在pycharm中正确显示希伯来语, 但是当我尝试将它写入数据库中的表时,我会得到问号???希伯来人应该在哪里 这就是我用熊猫和sqlalchemy尝试的: import pandas as pd from sqlalchemy import create_engine engine = create_engine('mssql+pymssql://server/test?

我正在尝试将包含希伯来文文本的.csv文件中的表写入sql server数据库。 该表有效,pandas读取数据正确,甚至在pycharm中正确显示希伯来语, 但是当我尝试将它写入数据库中的表时,我会得到问号???希伯来人应该在哪里

这就是我用熊猫和sqlalchemy尝试的:

import pandas as pd
from sqlalchemy import create_engine

engine = create_engine('mssql+pymssql://server/test?charset=utf8')
connection = engine.connect()

df = pd.read_csv("temp.csv", low_memory=False, encoding="UTF-8")
table_name = "test"
df.to_sql(table_name, connection, index=False, if_exists="append")
这会正确加载表,但无法写入希伯来语,
有什么建议吗?

您需要更改列的数据类型。文本已被弃用,应改用varcharMAX,但两者都不能存储unicode字符。要存储unicode字符,您需要使用ntext,这也是不推荐使用的;您需要使用nvarcharMAX

要更改列的定义,可以使用此伪SQL,您需要用适当的对象名替换大括号{}中的部分:

ALTER TABLE {YourTable} ALTER COLUMN {YourColumn} nvarchar(MAX);

编辑:注意,这不会恢复列中丢失的任何数据。一旦将非ANSI字符插入varchar或类似的数据类型,数据将立即丢失,除非更改数据类型并重新输入,否则无法恢复。

您需要更改列的数据类型。文本已被弃用,应改用varcharMAX,但两者都不能存储unicode字符。要存储unicode字符,您需要使用ntext,这也是不推荐使用的;您需要使用nvarcharMAX

要更改列的定义,可以使用此伪SQL,您需要用适当的对象名替换大括号{}中的部分:

ALTER TABLE {YourTable} ALTER COLUMN {YourColumn} nvarchar(MAX);

编辑:注意,这不会恢复列中丢失的任何数据。一旦将非ANSI字符插入到varchar或类似的数据类型中,数据将立即丢失,除非更改数据类型并重新输入,否则无法恢复数据。

列的数据类型是什么?它在python中读取为字符串,并以文本形式写入sql server。是的,但列的数据类型是什么?字符串不是SQL Server数据类型。正如我在SQL Server中回答的那样。TEXT自2005年以来一直被弃用,不支持非ansi字符。然而,unicode的等价物将是ntext,它也被弃用。将列的数据类型更改为nvarcharMAX。您需要使用非ansi字符存储4000多个字符的值。列的数据类型是什么?它在python中读取为字符串,并以文本形式写入sql server。是的,但列的数据类型是什么?字符串不是SQL Server数据类型。正如我在SQL Server中回答的那样。TEXT自2005年以来一直被弃用,不支持非ansi字符。然而,unicode的等价物将是ntext,它也被弃用。在中将列的数据类型更改为nvarcharMAX您需要使用非ansi字符存储4000多个字符的值。很抱歉,接受时间太长,我花了一些时间才能验证。对于SQL Server,它应该是什么?我也面临同样的问题。这个答案是针对SQL Server@m.Mariscal的。你能帮我回答这个问题吗?我在Python3上的技能充其量只是初学者,@M.Mariscal。很抱歉接受时间太长,我花了一些时间才能验证。对于SQL Server,它应该是什么?我也面临同样的问题。这个答案是针对SQL Server@m.Mariscal的。你能帮我回答这个问题吗?我的Python3技能充其量只是初学者,@M.Mariscal。