SQL 用于混合语言(阿拉伯语、英语、希腊字符、印地语数字等)的服务器排序规则
What SQL Server collation to use for mixed languages (Arabic, English, Greek Characters, Hindi numbers, etc)
我有一个主要来自维基数据的混合数据,它包含阿拉伯语字段、英语字段,并且阿拉伯语和英语的数据混合了其他语言,例如希腊字符、印地语数字、俄语、表情符号,西里尔字母:
可能的数据示例:
ڱ
١٩٣٣
Белгородский государственный университет
上面的示例显示为 ?在我的数据库中,我尝试使用不同的排序规则选项,例如
ARABIC_CI_AS
Arabic_CI_AI_KS
Arabic_100_CI_AI_KS_WS
我的 table 架构:
CREATE TABLE [dbo].[NED_Corpus_True_Expanded]
(
[id] [int] IDENTITY(1,1) NOT NULL,
[Wikidata_IQ] [nvarchar](50) NULL,
[WikidataType] [nvarchar](500) NULL,
[WikidataArabicLabel] [nvarchar](max) NULL,
[WikidataEnglishLabel] [nvarchar](max) NULL,
[WikidataAraliases] [nvarchar](max) NULL,
[WikidataEnaliases] [nvarchar](max) NULL,
[WikidataArabicDescrption] [nvarchar](max) NULL,
[WikidataEnglishDescrption] [nvarchar](max) NULL,
[WikidataMainCategory] [nvarchar](max) NULL,
[WikipediaArabicLabel] [nvarchar](max) NULL,
[WikipediaArabicDescrption] [nvarchar](max) NULL,
[Label] [float] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
但是对于混合数据无效,这里是数据的截图:
我使用以下脚本将 CSV 中的数据插入 SQL table:
import pyodbc
import pandas as pd
# insert data from csv file into dataframe.
# working directory for csv file: type "pwd" in Azure Data Studio or Linux
# working directory in Windows c:\users\username
df = pd.read_csv("ned_true_new.csv")
df.fillna("", inplace=True)
df.info()
# Some other example server values are
# server = 'localhost\sqlexpress' # for a named instance
# server = 'myserver,port' # to specify an alternate port
#password = 'yourpassword'
#cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username)
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
"Server=srvr;"
"Database=db;"
"Trusted_Connection=yes;")
cursor = cnxn.cursor()
# Insert Dataframe into SQL Server:
for index, row in df.iterrows():
#print(row)
cursor.execute('''INSERT INTO [dbo].[NED_Corpus_True_Expanded]
([Wikidata_IQ]
,[WikidataType]
,[WikidataArabicLabel]
,[WikidataEnglishLabel]
,WikidataAraliases
,WikidataEnaliases
,[WikidataArabicDescrption]
,[WikidataEnglishDescrption]
,[WikidataMainCategory]
,[WikipediaArabicLabel]
,[WikipediaArabicDescrption]
,[Label])
VALUES (?,?,?,?,?,?,?,?,?,?,?,?)''', row.id, row.type, row.arlabel,row.enlabel,row.araliases, row.enaliases,row.ardescription, row.endescription, row.maincategory, row.arwiki,row.wikiDescrption,row.Label )
cnxn.commit()
cursor.close()
我想 post 社区使用的解决方案,我使用 default 排序规则创建了一个新数据库,并且我使用了相同的架构 ( nvarchar) 导入数据的代码相同,默认排序规则适用于各种数据语言。
我有一个主要来自维基数据的混合数据,它包含阿拉伯语字段、英语字段,并且阿拉伯语和英语的数据混合了其他语言,例如希腊字符、印地语数字、俄语、表情符号,西里尔字母:
可能的数据示例:
ڱ
١٩٣٣
Белгородский государственный университет
上面的示例显示为 ?在我的数据库中,我尝试使用不同的排序规则选项,例如
ARABIC_CI_AS
Arabic_CI_AI_KS
Arabic_100_CI_AI_KS_WS
我的 table 架构:
CREATE TABLE [dbo].[NED_Corpus_True_Expanded]
(
[id] [int] IDENTITY(1,1) NOT NULL,
[Wikidata_IQ] [nvarchar](50) NULL,
[WikidataType] [nvarchar](500) NULL,
[WikidataArabicLabel] [nvarchar](max) NULL,
[WikidataEnglishLabel] [nvarchar](max) NULL,
[WikidataAraliases] [nvarchar](max) NULL,
[WikidataEnaliases] [nvarchar](max) NULL,
[WikidataArabicDescrption] [nvarchar](max) NULL,
[WikidataEnglishDescrption] [nvarchar](max) NULL,
[WikidataMainCategory] [nvarchar](max) NULL,
[WikipediaArabicLabel] [nvarchar](max) NULL,
[WikipediaArabicDescrption] [nvarchar](max) NULL,
[Label] [float] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
但是对于混合数据无效,这里是数据的截图:
我使用以下脚本将 CSV 中的数据插入 SQL table:
import pyodbc
import pandas as pd
# insert data from csv file into dataframe.
# working directory for csv file: type "pwd" in Azure Data Studio or Linux
# working directory in Windows c:\users\username
df = pd.read_csv("ned_true_new.csv")
df.fillna("", inplace=True)
df.info()
# Some other example server values are
# server = 'localhost\sqlexpress' # for a named instance
# server = 'myserver,port' # to specify an alternate port
#password = 'yourpassword'
#cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username)
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
"Server=srvr;"
"Database=db;"
"Trusted_Connection=yes;")
cursor = cnxn.cursor()
# Insert Dataframe into SQL Server:
for index, row in df.iterrows():
#print(row)
cursor.execute('''INSERT INTO [dbo].[NED_Corpus_True_Expanded]
([Wikidata_IQ]
,[WikidataType]
,[WikidataArabicLabel]
,[WikidataEnglishLabel]
,WikidataAraliases
,WikidataEnaliases
,[WikidataArabicDescrption]
,[WikidataEnglishDescrption]
,[WikidataMainCategory]
,[WikipediaArabicLabel]
,[WikipediaArabicDescrption]
,[Label])
VALUES (?,?,?,?,?,?,?,?,?,?,?,?)''', row.id, row.type, row.arlabel,row.enlabel,row.araliases, row.enaliases,row.ardescription, row.endescription, row.maincategory, row.arwiki,row.wikiDescrption,row.Label )
cnxn.commit()
cursor.close()
我想 post 社区使用的解决方案,我使用 default 排序规则创建了一个新数据库,并且我使用了相同的架构 ( nvarchar) 导入数据的代码相同,默认排序规则适用于各种数据语言。