python - 用python将unicode数据写入mssql?

标签 python sql-server pandas utf-8 character-encoding

我正在尝试将包含希伯来语文本的 .csv 文件中的表写入 SQL Server 数据库。
该表有效,pandas 读取数据正确(甚至在 pycharm 中正确显示希伯来语),
但是当我尝试将其写入数据库中的表时,我在希伯来语应该在的位置出现问号(“???”)。

这是我使用 pandas 和 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")

这会正确加载表格,但无法写入希伯来语,
有什么建议吗?

最佳答案

您需要更改列的数据类型。 text已弃用,并且 varchar(MAX)应该使用,但是,它们都不能存储 unicode 字符。要存储 unicode 字符,您需要使用 ntext ,这也已被弃用;您需要使用nvarchar(MAX) .

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

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

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

关于python - 用python将unicode数据写入mssql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53468205/

相关文章:

python - 在 flask 中将值从一条路线传播到另一条路线

python - 读取 Pandas 数据框前几行的方法

sql-server - 在 sql server 中使用 ON DELETE CASCADE 删除触发器问题

python - 如何使用pymssql将数据帧写入mssql?

python - 基于分组创建pandas列

python - 使用特定行的值作为列名称

python - 找不到 CV2 模块 -- 在 openCV 构建中找不到 PythonLibs?

python - 如何在 Python 中实现这两个循环?

SQL如何分组显示所有记录

python - 从堆叠的 Pandas 数据框中获取 JSON