【问题标题】:Why sql tables are out of UTF-8 on server?为什么sql表在服务器上没有UTF-8?
【发布时间】:2013-11-28 05:12:25
【问题描述】:

我有一个包含波斯字符的 xls 文件,我想加载它并将其保存到现有数据库中。

我已经试过这个来加载文件:

Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + path + ";Extended Properties=Excel 8.0;"

但现在当我加载它并将其保存到数据库时,波斯语字符看起来像 ? 符号。

但问题是这样的:

当我将其加载到本地或将某些内容从本地保存到数据库中时,没有问题,一切正常,但是在将其发布到服务器后,不仅从 xls 文件导入的行看起来很糟糕,而且当我保存一些时从文本框之类的控件到数据库,UTF-8 字符也类似于 ?

sql表是不是默认上Unicode的?!

这里有什么问题?

更新

这是我将加载的数据保存在数据库中的方式:

Dim con As New OleDb.OleDbConnection(str)
con.Open()
Dim ds As New OleDb.OleDbDataAdapter("Select * from [Sheet1$]", con)
Dim dt As New DataTable()
ds.Fill(dt)
Dim sqlconnection As SqlConnection
Dim sqlcommand As String
Dim sqlconnectionsrting As String = System.Configuration.ConfigurationManager.ConnectionStrings("IEEConnectionString").ConnectionString
sqlconnection = New SqlConnection(sqlconnectionsrting)
sqlconnection.Open()
code = (Convert.ToInt32(dt(i).Item(9))).ToString()
Dim productType = (Convert.ToInt32(dt(i).Item(11))).ToString()
Dim name = dt(i).Item(10)
Dim date1 = DateAndTime.Now
Dim price = (Convert.ToInt32(dt(i).Item(8))).ToString()
Dim factory = dt(i).Item(7)
Dim type = dt(i).Item(6).ToString()
Dim clearance = dt(i).Item(5).ToString()
Dim weight = dt(i).Item(4).ToString()
Dim perimeter = dt(i).Item(3).ToString()
Dim dimension = dt(i).Item(2).ToString()
Dim lenght = dt(i).Item(1).ToString()
Dim thickness = dt(i).Item(0).ToString()
sqlcommand = "INSERT INTO Product (ProductType,Name,Date,Code,Price,Factory,Type,Clearance,Weight,Perimeter,Dimension,Length,Thickness,IsShown) VALUES ('" + productType + "','" + name + "','" + date1 + "','" + code + "','" + price + "','" + factory + "','" + type + "','" + clearance + "','" + weight + "','" + perimeter + "','" + dimension + "','" + lenght + "','" + thickness + "','false')"
Dim command As New SqlCommand(sqlcommand, sqlconnection)
command.ExecuteNonQuery()
con.Close()

【问题讨论】:

  • SQL server 使用的代码页是可配置的,根据我有限的经验是 UTF8。
  • 数据库之前已经在 SQL_Latin1_General_CP1256_CI_AS 中创建,我刚刚添加了一些表,现在新表在发布到服务器时不支持 UTF-8(在本地可以)。
  • 您在数据库表中的列是什么数据类型?要支持 Unicode,您必须使用 NVARCHAR(x) - VARCHAR 支持 Unicode 或 UTF-8 ..
  • 检查您存储数据的列的数据类型,varcharchar 将不起作用。
  • 都是nvarchar(x)!

标签: c# asp.net sql-server vb.net utf-8


【解决方案1】:

您的 sqlcommand 错误。您必须使用参数而不是纯文本命令,因为它容易受到攻击。或者您必须引用所有值!

SQL Server 将“某些字符串”视为 VARCHAR,并在插入时将其转换为 NVARCHAR。你必须为 NVARCHAR 写 N'some string'。但我强烈建议你使用参数!

【讨论】:

    【解决方案2】:

    试试这个..

    Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0 XML;HDR=YES;';";
    

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 2020-05-30
      相关资源
      最近更新 更多